ERC-721
Overview
Max Total Supply
728 WHEEL
Holders
214
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 WHEELLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
WheeliesNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-13 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @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 Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @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 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 Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see {ERC20Detailed}. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @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 WheeliesNFT is ERC721Enumerable, Ownable { using SafeMath for uint256; bool public mintingActive; uint256 public mintingPrice = .05 ether; uint256 public mintingPerTxLimit = 5; uint256 public mintingStartTimestamp; mapping(address => uint256) public numPurchased; mapping(address => bool) public whitelist; address public poe; uint256 public POEBuffer; uint256 public maxSupply = 7777; string public baseURI; constructor(uint256 mintingStart, string memory _uri, address poeToken, uint256 buffer) ERC721("Wheelies", "WHEEL") { mintingActive = true; mintingStartTimestamp = mintingStart; baseURI = _uri; poe = poeToken; POEBuffer = buffer; } function amtPurchased(address buyer) public view returns (uint256){ return numPurchased[buyer]; } function addWhitelist(address buyer) public onlyOwner{ whitelist[buyer] = true; } function addManyWhitelist(address[] calldata buyers) public onlyOwner{ for (uint i = 0; i < buyers.length; i++){ whitelist[buyers[i]] = true; } } function removeWhitelist(address ape) public onlyOwner{ whitelist[ape] = false; } function removeManyWhitelist(address[] calldata buyers) public onlyOwner{ for (uint i = 0; i < buyers.length; i++){ whitelist[buyers[i]] = false; } } function isWhitelisted(address buyer) public view returns (bool){ return whitelist[buyer]; } function mint(uint256 _amount) public payable { require(mintingActive == true, "Minting is currently inactive"); require(mintingStartTimestamp <= block.timestamp || ((IERC20(poe).balanceOf(msg.sender) > 0 || isWhitelisted(msg.sender)) && block.timestamp + POEBuffer >= mintingStartTimestamp), "Sale not started yet"); //Introduce presale for whitelist + POE holders require(_amount <= mintingPerTxLimit, "Amount exceeded tx limit"); require(totalSupply().add(_amount) <= maxSupply, "This tx would exceed max supply"); require(msg.value >= mintingPrice.mul(_amount), "Not enough ETH sent"); require(amtPurchased(msg.sender) + _amount <= mintingPerTxLimit, "Cannot buy: Exceeds purchase limit!"); uint256 tsupply = totalSupply(); for(uint256 i = 0; i < _amount; i++) { _safeMint(msg.sender, tsupply + i); } numPurchased[msg.sender] += _amount; } function adminMint(address receiver, uint256 _amount) public onlyOwner { require(totalSupply().add(_amount) <= maxSupply, "This tx would exceed max supply"); uint256 tsupply = totalSupply(); for(uint256 i = 0; i < _amount; i++) { _safeMint(receiver, tsupply + i); } } /** * Set Base URI */ function setBaseURI(string memory newBaseURI) public onlyOwner { baseURI = newBaseURI; } /** * Get the metadata for a given tokenId */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, Strings.toString(tokenId + 1), ".json")) : ""; } function setMintingPrice(uint256 newMintingPrice) public onlyOwner { mintingPrice = newMintingPrice; } function setMintingActive(bool newMintingState) public onlyOwner { mintingActive = newMintingState; } function setMintingStart(uint256 mintingStart) public onlyOwner { mintingStartTimestamp = mintingStart; } function setMintingPerTxLimit(uint256 mintLimit) public onlyOwner { mintingPerTxLimit = mintLimit; } /** * Withdraw all funds from contract (Owner only) */ function withdrawFunds(address client) public onlyOwner { uint balance = address(this).balance; uint accounting = balance.mul(1000); uint toClient = accounting.div(1177); //accounting magick to assign 85% to client uint toOwner = balance.sub(toClient); payable(msg.sender).transfer(toOwner); payable(client).transfer(toClient); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"mintingStart","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"address","name":"poeToken","type":"address"},{"internalType":"uint256","name":"buffer","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"POEBuffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"buyers","type":"address[]"}],"name":"addManyWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"}],"name":"addWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"}],"name":"amtPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingPerTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numPurchased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"poe","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"buyers","type":"address[]"}],"name":"removeManyWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ape","type":"address"}],"name":"removeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newMintingState","type":"bool"}],"name":"setMintingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintLimit","type":"uint256"}],"name":"setMintingPerTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMintingPrice","type":"uint256"}],"name":"setMintingPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintingStart","type":"uint256"}],"name":"setMintingStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"client","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405266b1a2bc2ec50000600b556005600c55611e616012553480156200002757600080fd5b506040516200546b3803806200546b83398181016040528101906200004d9190620003c4565b6040518060400160405280600881526020017f576865656c6965730000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f574845454c0000000000000000000000000000000000000000000000000000008152508160009080519060200190620000d192919062000268565b508060019080519060200190620000ea92919062000268565b5050506200010d620001016200019a60201b60201c565b620001a260201b60201c565b6001600a60146101000a81548160ff02191690831515021790555083600d8190555082601390805190602001906200014792919062000268565b5081601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601181905550505050506200064b565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002769062000528565b90600052602060002090601f0160209004810192826200029a5760008555620002e6565b82601f10620002b557805160ff1916838001178555620002e6565b82800160010185558215620002e6579182015b82811115620002e5578251825591602001919060010190620002c8565b5b509050620002f59190620002f9565b5090565b5b8082111562000314576000816000905550600101620002fa565b5090565b60006200032f62000329846200047e565b62000455565b9050828152602081018484840111156200034e576200034d620005f7565b5b6200035b848285620004f2565b509392505050565b600081519050620003748162000617565b92915050565b600082601f830112620003925762000391620005f2565b5b8151620003a484826020860162000318565b91505092915050565b600081519050620003be8162000631565b92915050565b60008060008060808587031215620003e157620003e062000601565b5b6000620003f187828801620003ad565b945050602085015167ffffffffffffffff811115620004155762000414620005fc565b5b62000423878288016200037a565b9350506040620004368782880162000363565b92505060606200044987828801620003ad565b91505092959194509250565b60006200046162000474565b90506200046f82826200055e565b919050565b6000604051905090565b600067ffffffffffffffff8211156200049c576200049b620005c3565b5b620004a78262000606565b9050602081019050919050565b6000620004c182620004c8565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000512578082015181840152602081019050620004f5565b8381111562000522576000848401525b50505050565b600060028204905060018216806200054157607f821691505b6020821081141562000558576200055762000594565b5b50919050565b620005698262000606565b810181811067ffffffffffffffff821117156200058b576200058a620005c3565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200062281620004b4565b81146200062e57600080fd5b50565b6200063c81620004e8565b81146200064857600080fd5b50565b614e10806200065b6000396000f3fe60806040526004361061025c5760003560e01c80638417b47f11610144578063b88d4fde116100b6578063d5abeb011161007a578063d5abeb0114610921578063e58306f91461094c578063e985e9c514610975578063f2fde38b146109b2578063f80f5dd5146109db578063fe0eee3814610a045761025c565b8063b88d4fde1461083c578063c87b56dd14610865578063ca08d3d1146108a2578063caa83a9c146108cd578063d04ef285146108f85761025c565b80639d8168f0116101085780639d8168f01461073b5780639f4120fd14610764578063a0712d68146107a1578063a22cb465146107bd578063a3543ea0146107e6578063b7877ed4146108115761025c565b80638417b47f146106565780638da5cb5b1461067f57806390218652146106aa57806395d89b41146106d35780639b19251a146106fe5761025c565b80633af32abf116101dd5780636352211e116101a15780636352211e1461054857806368742da6146105855780636c0360eb146105ae57806370a08231146105d9578063715018a61461061657806378c8cda71461062d5761025c565b80633af32abf1461043f57806342842e0e1461047c5780634f6ccce7146104a557806353685b30146104e257806355f804b31461051f5761025c565b806318160ddd1161022457806318160ddd1461035857806323b872dd146103835780632f745c59146103ac57806331f9c919146103e957806335db70b5146104145761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b3146103065780630aaef9161461032f575b600080fd5b34801561026d57600080fd5b50610288600480360381019061028391906138ce565b610a2d565b6040516102959190613f1b565b60405180910390f35b3480156102aa57600080fd5b506102b3610aa7565b6040516102c09190613f36565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb9190613971565b610b39565b6040516102fd9190613eb4565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190613814565b610bbe565b005b34801561033b57600080fd5b5061035660048036038101906103519190613854565b610cd6565b005b34801561036457600080fd5b5061036d610df7565b60405161037a9190614258565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906136fe565b610e04565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190613814565b610e64565b6040516103e09190614258565b60405180910390f35b3480156103f557600080fd5b506103fe610f09565b60405161040b9190613f1b565b60405180910390f35b34801561042057600080fd5b50610429610f1c565b6040516104369190614258565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190613691565b610f22565b6040516104739190613f1b565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e91906136fe565b610f78565b005b3480156104b157600080fd5b506104cc60048036038101906104c79190613971565b610f98565b6040516104d99190614258565b60405180910390f35b3480156104ee57600080fd5b5061050960048036038101906105049190613691565b611009565b6040516105169190614258565b60405180910390f35b34801561052b57600080fd5b5061054660048036038101906105419190613928565b611052565b005b34801561055457600080fd5b5061056f600480360381019061056a9190613971565b6110e8565b60405161057c9190613eb4565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613691565b61119a565b005b3480156105ba57600080fd5b506105c36112f9565b6040516105d09190613f36565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb9190613691565b611387565b60405161060d9190614258565b60405180910390f35b34801561062257600080fd5b5061062b61143f565b005b34801561063957600080fd5b50610654600480360381019061064f9190613691565b6114c7565b005b34801561066257600080fd5b5061067d60048036038101906106789190613971565b61159e565b005b34801561068b57600080fd5b50610694611624565b6040516106a19190613eb4565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc9190613971565b61164e565b005b3480156106df57600080fd5b506106e86116d4565b6040516106f59190613f36565b60405180910390f35b34801561070a57600080fd5b5061072560048036038101906107209190613691565b611766565b6040516107329190613f1b565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190613854565b611786565b005b34801561077057600080fd5b5061078b60048036038101906107869190613691565b6118a7565b6040516107989190614258565b60405180910390f35b6107bb60048036038101906107b69190613971565b6118bf565b005b3480156107c957600080fd5b506107e460048036038101906107df91906137d4565b611c26565b005b3480156107f257600080fd5b506107fb611da7565b6040516108089190614258565b60405180910390f35b34801561081d57600080fd5b50610826611dad565b6040516108339190614258565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190613751565b611db3565b005b34801561087157600080fd5b5061088c60048036038101906108879190613971565b611e15565b6040516108999190613f36565b60405180910390f35b3480156108ae57600080fd5b506108b7611ec9565b6040516108c49190614258565b60405180910390f35b3480156108d957600080fd5b506108e2611ecf565b6040516108ef9190613eb4565b60405180910390f35b34801561090457600080fd5b5061091f600480360381019061091a91906138a1565b611ef5565b005b34801561092d57600080fd5b50610936611f8e565b6040516109439190614258565b60405180910390f35b34801561095857600080fd5b50610973600480360381019061096e9190613814565b611f94565b005b34801561098157600080fd5b5061099c600480360381019061099791906136be565b6120b3565b6040516109a99190613f1b565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d49190613691565b612147565b005b3480156109e757600080fd5b50610a0260048036038101906109fd9190613691565b61223f565b005b348015610a1057600080fd5b50610a2b6004803603810190610a269190613971565b612316565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aa05750610a9f8261239c565b5b9050919050565b606060008054610ab69061451d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae29061451d565b8015610b2f5780601f10610b0457610100808354040283529160200191610b2f565b820191906000526020600020905b815481529060010190602001808311610b1257829003601f168201915b5050505050905090565b6000610b448261247e565b610b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7a90614138565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bc9826110e8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c31906141d8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c596124ea565b73ffffffffffffffffffffffffffffffffffffffff161480610c885750610c8781610c826124ea565b6120b3565b5b610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe906140b8565b60405180910390fd5b610cd183836124f2565b505050565b610cde6124ea565b73ffffffffffffffffffffffffffffffffffffffff16610cfc611624565b73ffffffffffffffffffffffffffffffffffffffff1614610d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4990614158565b60405180910390fd5b60005b82829050811015610df2576001600f6000858585818110610d7957610d786146b6565b5b9050602002016020810190610d8e9190613691565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610dea90614580565b915050610d55565b505050565b6000600880549050905090565b610e15610e0f6124ea565b826125ab565b610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b906141f8565b60405180910390fd5b610e5f838383612689565b505050565b6000610e6f83611387565b8210610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea790613f78565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600a60149054906101000a900460ff1681565b600b5481565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f9383838360405180602001604052806000815250611db3565b505050565b6000610fa2610df7565b8210610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda90614238565b60405180910390fd5b60088281548110610ff757610ff66146b6565b5b90600052602060002001549050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61105a6124ea565b73ffffffffffffffffffffffffffffffffffffffff16611078611624565b73ffffffffffffffffffffffffffffffffffffffff16146110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590614158565b60405180910390fd5b80601390805190602001906110e492919061343a565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611191576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611188906140f8565b60405180910390fd5b80915050919050565b6111a26124ea565b73ffffffffffffffffffffffffffffffffffffffff166111c0611624565b73ffffffffffffffffffffffffffffffffffffffff1614611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614158565b60405180910390fd5b600047905060006112326103e8836128e590919063ffffffff16565b9050600061124b610499836128fb90919063ffffffff16565b90506000611262828561291190919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112aa573d6000803e3d6000fd5b508473ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156112f1573d6000803e3d6000fd5b505050505050565b601380546113069061451d565b80601f01602080910402602001604051908101604052809291908181526020018280546113329061451d565b801561137f5780601f106113545761010080835404028352916020019161137f565b820191906000526020600020905b81548152906001019060200180831161136257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef906140d8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114476124ea565b73ffffffffffffffffffffffffffffffffffffffff16611465611624565b73ffffffffffffffffffffffffffffffffffffffff16146114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290614158565b60405180910390fd5b6114c56000612927565b565b6114cf6124ea565b73ffffffffffffffffffffffffffffffffffffffff166114ed611624565b73ffffffffffffffffffffffffffffffffffffffff1614611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a90614158565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115a66124ea565b73ffffffffffffffffffffffffffffffffffffffff166115c4611624565b73ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190614158565b60405180910390fd5b80600b8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116566124ea565b73ffffffffffffffffffffffffffffffffffffffff16611674611624565b73ffffffffffffffffffffffffffffffffffffffff16146116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190614158565b60405180910390fd5b80600d8190555050565b6060600180546116e39061451d565b80601f016020809104026020016040519081016040528092919081815260200182805461170f9061451d565b801561175c5780601f106117315761010080835404028352916020019161175c565b820191906000526020600020905b81548152906001019060200180831161173f57829003601f168201915b5050505050905090565b600f6020528060005260406000206000915054906101000a900460ff1681565b61178e6124ea565b73ffffffffffffffffffffffffffffffffffffffff166117ac611624565b73ffffffffffffffffffffffffffffffffffffffff1614611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990614158565b60405180910390fd5b60005b828290508110156118a2576000600f6000858585818110611829576118286146b6565b5b905060200201602081019061183e9190613691565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061189a90614580565b915050611805565b505050565b600e6020528060005260406000206000915090505481565b60011515600a60149054906101000a900460ff16151514611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c90614098565b60405180910390fd5b42600d541115806119fb57506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161197e9190613eb4565b60206040518083038186803b15801561199657600080fd5b505afa1580156119aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ce919061399e565b11806119df57506119de33610f22565b5b80156119fa5750600d54601154426119f79190614352565b10155b5b611a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3190613f58565b60405180910390fd5b600c54811115611a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7690613ff8565b60405180910390fd5b601254611a9c82611a8e610df7565b6129ed90919063ffffffff16565b1115611add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad490614058565b60405180910390fd5b611af281600b546128e590919063ffffffff16565b341015611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b906141b8565b60405180910390fd5b600c5481611b4133611009565b611b4b9190614352565b1115611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8390614218565b60405180910390fd5b6000611b96610df7565b905060005b82811015611bcb57611bb8338284611bb39190614352565b612a03565b8080611bc390614580565b915050611b9b565b5081600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c1b9190614352565b925050819055505050565b611c2e6124ea565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390614038565b60405180910390fd5b8060056000611ca96124ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d566124ea565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d9b9190613f1b565b60405180910390a35050565b60115481565b600d5481565b611dc4611dbe6124ea565b836125ab565b611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa906141f8565b60405180910390fd5b611e0f84848484612a21565b50505050565b6060611e208261247e565b611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690614198565b60405180910390fd5b600060138054611e6e9061451d565b905011611e8a5760405180602001604052806000815250611ec2565b6013611ea1600184611e9c9190614352565b612a7d565b604051602001611eb2929190613e85565b6040516020818303038152906040525b9050919050565b600c5481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611efd6124ea565b73ffffffffffffffffffffffffffffffffffffffff16611f1b611624565b73ffffffffffffffffffffffffffffffffffffffff1614611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890614158565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b60125481565b611f9c6124ea565b73ffffffffffffffffffffffffffffffffffffffff16611fba611624565b73ffffffffffffffffffffffffffffffffffffffff1614612010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200790614158565b60405180910390fd5b60125461202d8261201f610df7565b6129ed90919063ffffffff16565b111561206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590614058565b60405180910390fd5b6000612078610df7565b905060005b828110156120ad5761209a8482846120959190614352565b612a03565b80806120a590614580565b91505061207d565b50505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61214f6124ea565b73ffffffffffffffffffffffffffffffffffffffff1661216d611624565b73ffffffffffffffffffffffffffffffffffffffff16146121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90614158565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222a90613fb8565b60405180910390fd5b61223c81612927565b50565b6122476124ea565b73ffffffffffffffffffffffffffffffffffffffff16612265611624565b73ffffffffffffffffffffffffffffffffffffffff16146122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b290614158565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61231e6124ea565b73ffffffffffffffffffffffffffffffffffffffff1661233c611624565b73ffffffffffffffffffffffffffffffffffffffff1614612392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238990614158565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061246757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612477575061247682612bde565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612565836110e8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125b68261247e565b6125f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ec90614078565b60405180910390fd5b6000612600836110e8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061266f57508373ffffffffffffffffffffffffffffffffffffffff1661265784610b39565b73ffffffffffffffffffffffffffffffffffffffff16145b80612680575061267f81856120b3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126a9826110e8565b73ffffffffffffffffffffffffffffffffffffffff16146126ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f690614178565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561276f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276690614018565b60405180910390fd5b61277a838383612c48565b6127856000826124f2565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127d59190614433565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461282c9190614352565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836128f391906143d9565b905092915050565b6000818361290991906143a8565b905092915050565b6000818361291f9190614433565b905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836129fb9190614352565b905092915050565b612a1d828260405180602001604052806000815250612d5c565b5050565b612a2c848484612689565b612a3884848484612db7565b612a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6e90613f98565b60405180910390fd5b50505050565b60606000821415612ac5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bd9565b600082905060005b60008214612af7578080612ae090614580565b915050600a82612af091906143a8565b9150612acd565b60008167ffffffffffffffff811115612b1357612b126146e5565b5b6040519080825280601f01601f191660200182016040528015612b455781602001600182028036833780820191505090505b5090505b60008514612bd257600182612b5e9190614433565b9150600a85612b6d91906145c9565b6030612b799190614352565b60f81b818381518110612b8f57612b8e6146b6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612bcb91906143a8565b9450612b49565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c53838383612f4e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c9657612c9181612f53565b612cd5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612cd457612cd38382612f9c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d1857612d1381613109565b612d57565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d5657612d5582826131da565b5b5b505050565b612d668383613259565b612d736000848484612db7565b612db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da990613f98565b60405180910390fd5b505050565b6000612dd88473ffffffffffffffffffffffffffffffffffffffff16613427565b15612f41578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e016124ea565b8786866040518563ffffffff1660e01b8152600401612e239493929190613ecf565b602060405180830381600087803b158015612e3d57600080fd5b505af1925050508015612e6e57506040513d601f19601f82011682018060405250810190612e6b91906138fb565b60015b612ef1573d8060008114612e9e576040519150601f19603f3d011682016040523d82523d6000602084013e612ea3565b606091505b50600081511415612ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee090613f98565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f46565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612fa984611387565b612fb39190614433565b9050600060076000848152602001908152602001600020549050818114613098576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061311d9190614433565b905060006009600084815260200190815260200160002054905060006008838154811061314d5761314c6146b6565b5b90600052602060002001549050806008838154811061316f5761316e6146b6565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806131be576131bd614687565b5b6001900381819060005260206000200160009055905550505050565b60006131e583611387565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c090614118565b60405180910390fd5b6132d28161247e565b15613312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330990613fd8565b60405180910390fd5b61331e60008383612c48565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461336e9190614352565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546134469061451d565b90600052602060002090601f01602090048101928261346857600085556134af565b82601f1061348157805160ff19168380011785556134af565b828001600101855582156134af579182015b828111156134ae578251825591602001919060010190613493565b5b5090506134bc91906134c0565b5090565b5b808211156134d95760008160009055506001016134c1565b5090565b60006134f06134eb84614298565b614273565b90508281526020810184848401111561350c5761350b614723565b5b6135178482856144db565b509392505050565b600061353261352d846142c9565b614273565b90508281526020810184848401111561354e5761354d614723565b5b6135598482856144db565b509392505050565b60008135905061357081614d7e565b92915050565b60008083601f84011261358c5761358b614719565b5b8235905067ffffffffffffffff8111156135a9576135a8614714565b5b6020830191508360208202830111156135c5576135c461471e565b5b9250929050565b6000813590506135db81614d95565b92915050565b6000813590506135f081614dac565b92915050565b60008151905061360581614dac565b92915050565b600082601f8301126136205761361f614719565b5b81356136308482602086016134dd565b91505092915050565b600082601f83011261364e5761364d614719565b5b813561365e84826020860161351f565b91505092915050565b60008135905061367681614dc3565b92915050565b60008151905061368b81614dc3565b92915050565b6000602082840312156136a7576136a661472d565b5b60006136b584828501613561565b91505092915050565b600080604083850312156136d5576136d461472d565b5b60006136e385828601613561565b92505060206136f485828601613561565b9150509250929050565b6000806000606084860312156137175761371661472d565b5b600061372586828701613561565b935050602061373686828701613561565b925050604061374786828701613667565b9150509250925092565b6000806000806080858703121561376b5761376a61472d565b5b600061377987828801613561565b945050602061378a87828801613561565b935050604061379b87828801613667565b925050606085013567ffffffffffffffff8111156137bc576137bb614728565b5b6137c88782880161360b565b91505092959194509250565b600080604083850312156137eb576137ea61472d565b5b60006137f985828601613561565b925050602061380a858286016135cc565b9150509250929050565b6000806040838503121561382b5761382a61472d565b5b600061383985828601613561565b925050602061384a85828601613667565b9150509250929050565b6000806020838503121561386b5761386a61472d565b5b600083013567ffffffffffffffff81111561388957613888614728565b5b61389585828601613576565b92509250509250929050565b6000602082840312156138b7576138b661472d565b5b60006138c5848285016135cc565b91505092915050565b6000602082840312156138e4576138e361472d565b5b60006138f2848285016135e1565b91505092915050565b6000602082840312156139115761391061472d565b5b600061391f848285016135f6565b91505092915050565b60006020828403121561393e5761393d61472d565b5b600082013567ffffffffffffffff81111561395c5761395b614728565b5b61396884828501613639565b91505092915050565b6000602082840312156139875761398661472d565b5b600061399584828501613667565b91505092915050565b6000602082840312156139b4576139b361472d565b5b60006139c28482850161367c565b91505092915050565b6139d481614467565b82525050565b6139e381614479565b82525050565b60006139f48261430f565b6139fe8185614325565b9350613a0e8185602086016144ea565b613a1781614732565b840191505092915050565b6000613a2d8261431a565b613a378185614336565b9350613a478185602086016144ea565b613a5081614732565b840191505092915050565b6000613a668261431a565b613a708185614347565b9350613a808185602086016144ea565b80840191505092915050565b60008154613a998161451d565b613aa38186614347565b94506001821660008114613abe5760018114613acf57613b02565b60ff19831686528186019350613b02565b613ad8856142fa565b60005b83811015613afa57815481890152600182019150602081019050613adb565b838801955050505b50505092915050565b6000613b18601483614336565b9150613b2382614743565b602082019050919050565b6000613b3b602b83614336565b9150613b468261476c565b604082019050919050565b6000613b5e603283614336565b9150613b69826147bb565b604082019050919050565b6000613b81602683614336565b9150613b8c8261480a565b604082019050919050565b6000613ba4601c83614336565b9150613baf82614859565b602082019050919050565b6000613bc7601883614336565b9150613bd282614882565b602082019050919050565b6000613bea602483614336565b9150613bf5826148ab565b604082019050919050565b6000613c0d601983614336565b9150613c18826148fa565b602082019050919050565b6000613c30601f83614336565b9150613c3b82614923565b602082019050919050565b6000613c53602c83614336565b9150613c5e8261494c565b604082019050919050565b6000613c76601d83614336565b9150613c818261499b565b602082019050919050565b6000613c99603883614336565b9150613ca4826149c4565b604082019050919050565b6000613cbc602a83614336565b9150613cc782614a13565b604082019050919050565b6000613cdf602983614336565b9150613cea82614a62565b604082019050919050565b6000613d02602083614336565b9150613d0d82614ab1565b602082019050919050565b6000613d25602c83614336565b9150613d3082614ada565b604082019050919050565b6000613d48600583614347565b9150613d5382614b29565b600582019050919050565b6000613d6b602083614336565b9150613d7682614b52565b602082019050919050565b6000613d8e602983614336565b9150613d9982614b7b565b604082019050919050565b6000613db1602f83614336565b9150613dbc82614bca565b604082019050919050565b6000613dd4601383614336565b9150613ddf82614c19565b602082019050919050565b6000613df7602183614336565b9150613e0282614c42565b604082019050919050565b6000613e1a603183614336565b9150613e2582614c91565b604082019050919050565b6000613e3d602383614336565b9150613e4882614ce0565b604082019050919050565b6000613e60602c83614336565b9150613e6b82614d2f565b604082019050919050565b613e7f816144d1565b82525050565b6000613e918285613a8c565b9150613e9d8284613a5b565b9150613ea882613d3b565b91508190509392505050565b6000602082019050613ec960008301846139cb565b92915050565b6000608082019050613ee460008301876139cb565b613ef160208301866139cb565b613efe6040830185613e76565b8181036060830152613f1081846139e9565b905095945050505050565b6000602082019050613f3060008301846139da565b92915050565b60006020820190508181036000830152613f508184613a22565b905092915050565b60006020820190508181036000830152613f7181613b0b565b9050919050565b60006020820190508181036000830152613f9181613b2e565b9050919050565b60006020820190508181036000830152613fb181613b51565b9050919050565b60006020820190508181036000830152613fd181613b74565b9050919050565b60006020820190508181036000830152613ff181613b97565b9050919050565b6000602082019050818103600083015261401181613bba565b9050919050565b6000602082019050818103600083015261403181613bdd565b9050919050565b6000602082019050818103600083015261405181613c00565b9050919050565b6000602082019050818103600083015261407181613c23565b9050919050565b6000602082019050818103600083015261409181613c46565b9050919050565b600060208201905081810360008301526140b181613c69565b9050919050565b600060208201905081810360008301526140d181613c8c565b9050919050565b600060208201905081810360008301526140f181613caf565b9050919050565b6000602082019050818103600083015261411181613cd2565b9050919050565b6000602082019050818103600083015261413181613cf5565b9050919050565b6000602082019050818103600083015261415181613d18565b9050919050565b6000602082019050818103600083015261417181613d5e565b9050919050565b6000602082019050818103600083015261419181613d81565b9050919050565b600060208201905081810360008301526141b181613da4565b9050919050565b600060208201905081810360008301526141d181613dc7565b9050919050565b600060208201905081810360008301526141f181613dea565b9050919050565b6000602082019050818103600083015261421181613e0d565b9050919050565b6000602082019050818103600083015261423181613e30565b9050919050565b6000602082019050818103600083015261425181613e53565b9050919050565b600060208201905061426d6000830184613e76565b92915050565b600061427d61428e565b9050614289828261454f565b919050565b6000604051905090565b600067ffffffffffffffff8211156142b3576142b26146e5565b5b6142bc82614732565b9050602081019050919050565b600067ffffffffffffffff8211156142e4576142e36146e5565b5b6142ed82614732565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061435d826144d1565b9150614368836144d1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561439d5761439c6145fa565b5b828201905092915050565b60006143b3826144d1565b91506143be836144d1565b9250826143ce576143cd614629565b5b828204905092915050565b60006143e4826144d1565b91506143ef836144d1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614428576144276145fa565b5b828202905092915050565b600061443e826144d1565b9150614449836144d1565b92508282101561445c5761445b6145fa565b5b828203905092915050565b6000614472826144b1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145085780820151818401526020810190506144ed565b83811115614517576000848401525b50505050565b6000600282049050600182168061453557607f821691505b6020821081141561454957614548614658565b5b50919050565b61455882614732565b810181811067ffffffffffffffff82111715614577576145766146e5565b5b80604052505050565b600061458b826144d1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145be576145bd6145fa565b5b600182019050919050565b60006145d4826144d1565b91506145df836144d1565b9250826145ef576145ee614629565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c65206e6f74207374617274656420796574000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f416d6f756e74206578636565646564207478206c696d69740000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5468697320747820776f756c6420657863656564206d617820737570706c7900600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74696e672069732063757272656e746c7920696e616374697665000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204554482073656e7400000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616e6e6f74206275793a2045786365656473207075726368617365206c696d60008201527f6974210000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614d8781614467565b8114614d9257600080fd5b50565b614d9e81614479565b8114614da957600080fd5b50565b614db581614485565b8114614dc057600080fd5b50565b614dcc816144d1565b8114614dd757600080fd5b5056fea26469706673582212205b92b5fcddd69b8e7a53f4416db63d8db9d334978ea54f5dea22f4433095ee7264736f6c634300080700330000000000000000000000000000000000000000000000000000000061be841000000000000000000000000000000000000000000000000000000000000000800000000000000000000000005945baf9272e0808165adea61b932ec1604fb161000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000000000186170692e636f6f6c636174736e66742e636f6d2f6361742f0000000000000000
Deployed Bytecode
0x60806040526004361061025c5760003560e01c80638417b47f11610144578063b88d4fde116100b6578063d5abeb011161007a578063d5abeb0114610921578063e58306f91461094c578063e985e9c514610975578063f2fde38b146109b2578063f80f5dd5146109db578063fe0eee3814610a045761025c565b8063b88d4fde1461083c578063c87b56dd14610865578063ca08d3d1146108a2578063caa83a9c146108cd578063d04ef285146108f85761025c565b80639d8168f0116101085780639d8168f01461073b5780639f4120fd14610764578063a0712d68146107a1578063a22cb465146107bd578063a3543ea0146107e6578063b7877ed4146108115761025c565b80638417b47f146106565780638da5cb5b1461067f57806390218652146106aa57806395d89b41146106d35780639b19251a146106fe5761025c565b80633af32abf116101dd5780636352211e116101a15780636352211e1461054857806368742da6146105855780636c0360eb146105ae57806370a08231146105d9578063715018a61461061657806378c8cda71461062d5761025c565b80633af32abf1461043f57806342842e0e1461047c5780634f6ccce7146104a557806353685b30146104e257806355f804b31461051f5761025c565b806318160ddd1161022457806318160ddd1461035857806323b872dd146103835780632f745c59146103ac57806331f9c919146103e957806335db70b5146104145761025c565b806301ffc9a71461026157806306fdde031461029e578063081812fc146102c9578063095ea7b3146103065780630aaef9161461032f575b600080fd5b34801561026d57600080fd5b50610288600480360381019061028391906138ce565b610a2d565b6040516102959190613f1b565b60405180910390f35b3480156102aa57600080fd5b506102b3610aa7565b6040516102c09190613f36565b60405180910390f35b3480156102d557600080fd5b506102f060048036038101906102eb9190613971565b610b39565b6040516102fd9190613eb4565b60405180910390f35b34801561031257600080fd5b5061032d60048036038101906103289190613814565b610bbe565b005b34801561033b57600080fd5b5061035660048036038101906103519190613854565b610cd6565b005b34801561036457600080fd5b5061036d610df7565b60405161037a9190614258565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a591906136fe565b610e04565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190613814565b610e64565b6040516103e09190614258565b60405180910390f35b3480156103f557600080fd5b506103fe610f09565b60405161040b9190613f1b565b60405180910390f35b34801561042057600080fd5b50610429610f1c565b6040516104369190614258565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190613691565b610f22565b6040516104739190613f1b565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e91906136fe565b610f78565b005b3480156104b157600080fd5b506104cc60048036038101906104c79190613971565b610f98565b6040516104d99190614258565b60405180910390f35b3480156104ee57600080fd5b5061050960048036038101906105049190613691565b611009565b6040516105169190614258565b60405180910390f35b34801561052b57600080fd5b5061054660048036038101906105419190613928565b611052565b005b34801561055457600080fd5b5061056f600480360381019061056a9190613971565b6110e8565b60405161057c9190613eb4565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613691565b61119a565b005b3480156105ba57600080fd5b506105c36112f9565b6040516105d09190613f36565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb9190613691565b611387565b60405161060d9190614258565b60405180910390f35b34801561062257600080fd5b5061062b61143f565b005b34801561063957600080fd5b50610654600480360381019061064f9190613691565b6114c7565b005b34801561066257600080fd5b5061067d60048036038101906106789190613971565b61159e565b005b34801561068b57600080fd5b50610694611624565b6040516106a19190613eb4565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc9190613971565b61164e565b005b3480156106df57600080fd5b506106e86116d4565b6040516106f59190613f36565b60405180910390f35b34801561070a57600080fd5b5061072560048036038101906107209190613691565b611766565b6040516107329190613f1b565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190613854565b611786565b005b34801561077057600080fd5b5061078b60048036038101906107869190613691565b6118a7565b6040516107989190614258565b60405180910390f35b6107bb60048036038101906107b69190613971565b6118bf565b005b3480156107c957600080fd5b506107e460048036038101906107df91906137d4565b611c26565b005b3480156107f257600080fd5b506107fb611da7565b6040516108089190614258565b60405180910390f35b34801561081d57600080fd5b50610826611dad565b6040516108339190614258565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190613751565b611db3565b005b34801561087157600080fd5b5061088c60048036038101906108879190613971565b611e15565b6040516108999190613f36565b60405180910390f35b3480156108ae57600080fd5b506108b7611ec9565b6040516108c49190614258565b60405180910390f35b3480156108d957600080fd5b506108e2611ecf565b6040516108ef9190613eb4565b60405180910390f35b34801561090457600080fd5b5061091f600480360381019061091a91906138a1565b611ef5565b005b34801561092d57600080fd5b50610936611f8e565b6040516109439190614258565b60405180910390f35b34801561095857600080fd5b50610973600480360381019061096e9190613814565b611f94565b005b34801561098157600080fd5b5061099c600480360381019061099791906136be565b6120b3565b6040516109a99190613f1b565b60405180910390f35b3480156109be57600080fd5b506109d960048036038101906109d49190613691565b612147565b005b3480156109e757600080fd5b50610a0260048036038101906109fd9190613691565b61223f565b005b348015610a1057600080fd5b50610a2b6004803603810190610a269190613971565b612316565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aa05750610a9f8261239c565b5b9050919050565b606060008054610ab69061451d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae29061451d565b8015610b2f5780601f10610b0457610100808354040283529160200191610b2f565b820191906000526020600020905b815481529060010190602001808311610b1257829003601f168201915b5050505050905090565b6000610b448261247e565b610b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7a90614138565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bc9826110e8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c31906141d8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c596124ea565b73ffffffffffffffffffffffffffffffffffffffff161480610c885750610c8781610c826124ea565b6120b3565b5b610cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbe906140b8565b60405180910390fd5b610cd183836124f2565b505050565b610cde6124ea565b73ffffffffffffffffffffffffffffffffffffffff16610cfc611624565b73ffffffffffffffffffffffffffffffffffffffff1614610d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4990614158565b60405180910390fd5b60005b82829050811015610df2576001600f6000858585818110610d7957610d786146b6565b5b9050602002016020810190610d8e9190613691565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610dea90614580565b915050610d55565b505050565b6000600880549050905090565b610e15610e0f6124ea565b826125ab565b610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b906141f8565b60405180910390fd5b610e5f838383612689565b505050565b6000610e6f83611387565b8210610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea790613f78565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600a60149054906101000a900460ff1681565b600b5481565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f9383838360405180602001604052806000815250611db3565b505050565b6000610fa2610df7565b8210610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda90614238565b60405180910390fd5b60088281548110610ff757610ff66146b6565b5b90600052602060002001549050919050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61105a6124ea565b73ffffffffffffffffffffffffffffffffffffffff16611078611624565b73ffffffffffffffffffffffffffffffffffffffff16146110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590614158565b60405180910390fd5b80601390805190602001906110e492919061343a565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611191576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611188906140f8565b60405180910390fd5b80915050919050565b6111a26124ea565b73ffffffffffffffffffffffffffffffffffffffff166111c0611624565b73ffffffffffffffffffffffffffffffffffffffff1614611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614158565b60405180910390fd5b600047905060006112326103e8836128e590919063ffffffff16565b9050600061124b610499836128fb90919063ffffffff16565b90506000611262828561291190919063ffffffff16565b90503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112aa573d6000803e3d6000fd5b508473ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f193505050501580156112f1573d6000803e3d6000fd5b505050505050565b601380546113069061451d565b80601f01602080910402602001604051908101604052809291908181526020018280546113329061451d565b801561137f5780601f106113545761010080835404028352916020019161137f565b820191906000526020600020905b81548152906001019060200180831161136257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef906140d8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114476124ea565b73ffffffffffffffffffffffffffffffffffffffff16611465611624565b73ffffffffffffffffffffffffffffffffffffffff16146114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290614158565b60405180910390fd5b6114c56000612927565b565b6114cf6124ea565b73ffffffffffffffffffffffffffffffffffffffff166114ed611624565b73ffffffffffffffffffffffffffffffffffffffff1614611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a90614158565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115a66124ea565b73ffffffffffffffffffffffffffffffffffffffff166115c4611624565b73ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190614158565b60405180910390fd5b80600b8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116566124ea565b73ffffffffffffffffffffffffffffffffffffffff16611674611624565b73ffffffffffffffffffffffffffffffffffffffff16146116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190614158565b60405180910390fd5b80600d8190555050565b6060600180546116e39061451d565b80601f016020809104026020016040519081016040528092919081815260200182805461170f9061451d565b801561175c5780601f106117315761010080835404028352916020019161175c565b820191906000526020600020905b81548152906001019060200180831161173f57829003601f168201915b5050505050905090565b600f6020528060005260406000206000915054906101000a900460ff1681565b61178e6124ea565b73ffffffffffffffffffffffffffffffffffffffff166117ac611624565b73ffffffffffffffffffffffffffffffffffffffff1614611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990614158565b60405180910390fd5b60005b828290508110156118a2576000600f6000858585818110611829576118286146b6565b5b905060200201602081019061183e9190613691565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061189a90614580565b915050611805565b505050565b600e6020528060005260406000206000915090505481565b60011515600a60149054906101000a900460ff16151514611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c90614098565b60405180910390fd5b42600d541115806119fb57506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161197e9190613eb4565b60206040518083038186803b15801561199657600080fd5b505afa1580156119aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ce919061399e565b11806119df57506119de33610f22565b5b80156119fa5750600d54601154426119f79190614352565b10155b5b611a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3190613f58565b60405180910390fd5b600c54811115611a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7690613ff8565b60405180910390fd5b601254611a9c82611a8e610df7565b6129ed90919063ffffffff16565b1115611add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad490614058565b60405180910390fd5b611af281600b546128e590919063ffffffff16565b341015611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b906141b8565b60405180910390fd5b600c5481611b4133611009565b611b4b9190614352565b1115611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8390614218565b60405180910390fd5b6000611b96610df7565b905060005b82811015611bcb57611bb8338284611bb39190614352565b612a03565b8080611bc390614580565b915050611b9b565b5081600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c1b9190614352565b925050819055505050565b611c2e6124ea565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390614038565b60405180910390fd5b8060056000611ca96124ea565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611d566124ea565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d9b9190613f1b565b60405180910390a35050565b60115481565b600d5481565b611dc4611dbe6124ea565b836125ab565b611e03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfa906141f8565b60405180910390fd5b611e0f84848484612a21565b50505050565b6060611e208261247e565b611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690614198565b60405180910390fd5b600060138054611e6e9061451d565b905011611e8a5760405180602001604052806000815250611ec2565b6013611ea1600184611e9c9190614352565b612a7d565b604051602001611eb2929190613e85565b6040516020818303038152906040525b9050919050565b600c5481565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611efd6124ea565b73ffffffffffffffffffffffffffffffffffffffff16611f1b611624565b73ffffffffffffffffffffffffffffffffffffffff1614611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890614158565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b60125481565b611f9c6124ea565b73ffffffffffffffffffffffffffffffffffffffff16611fba611624565b73ffffffffffffffffffffffffffffffffffffffff1614612010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200790614158565b60405180910390fd5b60125461202d8261201f610df7565b6129ed90919063ffffffff16565b111561206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590614058565b60405180910390fd5b6000612078610df7565b905060005b828110156120ad5761209a8482846120959190614352565b612a03565b80806120a590614580565b91505061207d565b50505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61214f6124ea565b73ffffffffffffffffffffffffffffffffffffffff1661216d611624565b73ffffffffffffffffffffffffffffffffffffffff16146121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90614158565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222a90613fb8565b60405180910390fd5b61223c81612927565b50565b6122476124ea565b73ffffffffffffffffffffffffffffffffffffffff16612265611624565b73ffffffffffffffffffffffffffffffffffffffff16146122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b290614158565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61231e6124ea565b73ffffffffffffffffffffffffffffffffffffffff1661233c611624565b73ffffffffffffffffffffffffffffffffffffffff1614612392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238990614158565b60405180910390fd5b80600c8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061246757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612477575061247682612bde565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612565836110e8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125b68261247e565b6125f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ec90614078565b60405180910390fd5b6000612600836110e8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061266f57508373ffffffffffffffffffffffffffffffffffffffff1661265784610b39565b73ffffffffffffffffffffffffffffffffffffffff16145b80612680575061267f81856120b3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126a9826110e8565b73ffffffffffffffffffffffffffffffffffffffff16146126ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f690614178565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561276f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276690614018565b60405180910390fd5b61277a838383612c48565b6127856000826124f2565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127d59190614433565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461282c9190614352565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600081836128f391906143d9565b905092915050565b6000818361290991906143a8565b905092915050565b6000818361291f9190614433565b905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836129fb9190614352565b905092915050565b612a1d828260405180602001604052806000815250612d5c565b5050565b612a2c848484612689565b612a3884848484612db7565b612a77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6e90613f98565b60405180910390fd5b50505050565b60606000821415612ac5576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612bd9565b600082905060005b60008214612af7578080612ae090614580565b915050600a82612af091906143a8565b9150612acd565b60008167ffffffffffffffff811115612b1357612b126146e5565b5b6040519080825280601f01601f191660200182016040528015612b455781602001600182028036833780820191505090505b5090505b60008514612bd257600182612b5e9190614433565b9150600a85612b6d91906145c9565b6030612b799190614352565b60f81b818381518110612b8f57612b8e6146b6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612bcb91906143a8565b9450612b49565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c53838383612f4e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c9657612c9181612f53565b612cd5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612cd457612cd38382612f9c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d1857612d1381613109565b612d57565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d5657612d5582826131da565b5b5b505050565b612d668383613259565b612d736000848484612db7565b612db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da990613f98565b60405180910390fd5b505050565b6000612dd88473ffffffffffffffffffffffffffffffffffffffff16613427565b15612f41578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e016124ea565b8786866040518563ffffffff1660e01b8152600401612e239493929190613ecf565b602060405180830381600087803b158015612e3d57600080fd5b505af1925050508015612e6e57506040513d601f19601f82011682018060405250810190612e6b91906138fb565b60015b612ef1573d8060008114612e9e576040519150601f19603f3d011682016040523d82523d6000602084013e612ea3565b606091505b50600081511415612ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee090613f98565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f46565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612fa984611387565b612fb39190614433565b9050600060076000848152602001908152602001600020549050818114613098576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061311d9190614433565b905060006009600084815260200190815260200160002054905060006008838154811061314d5761314c6146b6565b5b90600052602060002001549050806008838154811061316f5761316e6146b6565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806131be576131bd614687565b5b6001900381819060005260206000200160009055905550505050565b60006131e583611387565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c090614118565b60405180910390fd5b6132d28161247e565b15613312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330990613fd8565b60405180910390fd5b61331e60008383612c48565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461336e9190614352565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546134469061451d565b90600052602060002090601f01602090048101928261346857600085556134af565b82601f1061348157805160ff19168380011785556134af565b828001600101855582156134af579182015b828111156134ae578251825591602001919060010190613493565b5b5090506134bc91906134c0565b5090565b5b808211156134d95760008160009055506001016134c1565b5090565b60006134f06134eb84614298565b614273565b90508281526020810184848401111561350c5761350b614723565b5b6135178482856144db565b509392505050565b600061353261352d846142c9565b614273565b90508281526020810184848401111561354e5761354d614723565b5b6135598482856144db565b509392505050565b60008135905061357081614d7e565b92915050565b60008083601f84011261358c5761358b614719565b5b8235905067ffffffffffffffff8111156135a9576135a8614714565b5b6020830191508360208202830111156135c5576135c461471e565b5b9250929050565b6000813590506135db81614d95565b92915050565b6000813590506135f081614dac565b92915050565b60008151905061360581614dac565b92915050565b600082601f8301126136205761361f614719565b5b81356136308482602086016134dd565b91505092915050565b600082601f83011261364e5761364d614719565b5b813561365e84826020860161351f565b91505092915050565b60008135905061367681614dc3565b92915050565b60008151905061368b81614dc3565b92915050565b6000602082840312156136a7576136a661472d565b5b60006136b584828501613561565b91505092915050565b600080604083850312156136d5576136d461472d565b5b60006136e385828601613561565b92505060206136f485828601613561565b9150509250929050565b6000806000606084860312156137175761371661472d565b5b600061372586828701613561565b935050602061373686828701613561565b925050604061374786828701613667565b9150509250925092565b6000806000806080858703121561376b5761376a61472d565b5b600061377987828801613561565b945050602061378a87828801613561565b935050604061379b87828801613667565b925050606085013567ffffffffffffffff8111156137bc576137bb614728565b5b6137c88782880161360b565b91505092959194509250565b600080604083850312156137eb576137ea61472d565b5b60006137f985828601613561565b925050602061380a858286016135cc565b9150509250929050565b6000806040838503121561382b5761382a61472d565b5b600061383985828601613561565b925050602061384a85828601613667565b9150509250929050565b6000806020838503121561386b5761386a61472d565b5b600083013567ffffffffffffffff81111561388957613888614728565b5b61389585828601613576565b92509250509250929050565b6000602082840312156138b7576138b661472d565b5b60006138c5848285016135cc565b91505092915050565b6000602082840312156138e4576138e361472d565b5b60006138f2848285016135e1565b91505092915050565b6000602082840312156139115761391061472d565b5b600061391f848285016135f6565b91505092915050565b60006020828403121561393e5761393d61472d565b5b600082013567ffffffffffffffff81111561395c5761395b614728565b5b61396884828501613639565b91505092915050565b6000602082840312156139875761398661472d565b5b600061399584828501613667565b91505092915050565b6000602082840312156139b4576139b361472d565b5b60006139c28482850161367c565b91505092915050565b6139d481614467565b82525050565b6139e381614479565b82525050565b60006139f48261430f565b6139fe8185614325565b9350613a0e8185602086016144ea565b613a1781614732565b840191505092915050565b6000613a2d8261431a565b613a378185614336565b9350613a478185602086016144ea565b613a5081614732565b840191505092915050565b6000613a668261431a565b613a708185614347565b9350613a808185602086016144ea565b80840191505092915050565b60008154613a998161451d565b613aa38186614347565b94506001821660008114613abe5760018114613acf57613b02565b60ff19831686528186019350613b02565b613ad8856142fa565b60005b83811015613afa57815481890152600182019150602081019050613adb565b838801955050505b50505092915050565b6000613b18601483614336565b9150613b2382614743565b602082019050919050565b6000613b3b602b83614336565b9150613b468261476c565b604082019050919050565b6000613b5e603283614336565b9150613b69826147bb565b604082019050919050565b6000613b81602683614336565b9150613b8c8261480a565b604082019050919050565b6000613ba4601c83614336565b9150613baf82614859565b602082019050919050565b6000613bc7601883614336565b9150613bd282614882565b602082019050919050565b6000613bea602483614336565b9150613bf5826148ab565b604082019050919050565b6000613c0d601983614336565b9150613c18826148fa565b602082019050919050565b6000613c30601f83614336565b9150613c3b82614923565b602082019050919050565b6000613c53602c83614336565b9150613c5e8261494c565b604082019050919050565b6000613c76601d83614336565b9150613c818261499b565b602082019050919050565b6000613c99603883614336565b9150613ca4826149c4565b604082019050919050565b6000613cbc602a83614336565b9150613cc782614a13565b604082019050919050565b6000613cdf602983614336565b9150613cea82614a62565b604082019050919050565b6000613d02602083614336565b9150613d0d82614ab1565b602082019050919050565b6000613d25602c83614336565b9150613d3082614ada565b604082019050919050565b6000613d48600583614347565b9150613d5382614b29565b600582019050919050565b6000613d6b602083614336565b9150613d7682614b52565b602082019050919050565b6000613d8e602983614336565b9150613d9982614b7b565b604082019050919050565b6000613db1602f83614336565b9150613dbc82614bca565b604082019050919050565b6000613dd4601383614336565b9150613ddf82614c19565b602082019050919050565b6000613df7602183614336565b9150613e0282614c42565b604082019050919050565b6000613e1a603183614336565b9150613e2582614c91565b604082019050919050565b6000613e3d602383614336565b9150613e4882614ce0565b604082019050919050565b6000613e60602c83614336565b9150613e6b82614d2f565b604082019050919050565b613e7f816144d1565b82525050565b6000613e918285613a8c565b9150613e9d8284613a5b565b9150613ea882613d3b565b91508190509392505050565b6000602082019050613ec960008301846139cb565b92915050565b6000608082019050613ee460008301876139cb565b613ef160208301866139cb565b613efe6040830185613e76565b8181036060830152613f1081846139e9565b905095945050505050565b6000602082019050613f3060008301846139da565b92915050565b60006020820190508181036000830152613f508184613a22565b905092915050565b60006020820190508181036000830152613f7181613b0b565b9050919050565b60006020820190508181036000830152613f9181613b2e565b9050919050565b60006020820190508181036000830152613fb181613b51565b9050919050565b60006020820190508181036000830152613fd181613b74565b9050919050565b60006020820190508181036000830152613ff181613b97565b9050919050565b6000602082019050818103600083015261401181613bba565b9050919050565b6000602082019050818103600083015261403181613bdd565b9050919050565b6000602082019050818103600083015261405181613c00565b9050919050565b6000602082019050818103600083015261407181613c23565b9050919050565b6000602082019050818103600083015261409181613c46565b9050919050565b600060208201905081810360008301526140b181613c69565b9050919050565b600060208201905081810360008301526140d181613c8c565b9050919050565b600060208201905081810360008301526140f181613caf565b9050919050565b6000602082019050818103600083015261411181613cd2565b9050919050565b6000602082019050818103600083015261413181613cf5565b9050919050565b6000602082019050818103600083015261415181613d18565b9050919050565b6000602082019050818103600083015261417181613d5e565b9050919050565b6000602082019050818103600083015261419181613d81565b9050919050565b600060208201905081810360008301526141b181613da4565b9050919050565b600060208201905081810360008301526141d181613dc7565b9050919050565b600060208201905081810360008301526141f181613dea565b9050919050565b6000602082019050818103600083015261421181613e0d565b9050919050565b6000602082019050818103600083015261423181613e30565b9050919050565b6000602082019050818103600083015261425181613e53565b9050919050565b600060208201905061426d6000830184613e76565b92915050565b600061427d61428e565b9050614289828261454f565b919050565b6000604051905090565b600067ffffffffffffffff8211156142b3576142b26146e5565b5b6142bc82614732565b9050602081019050919050565b600067ffffffffffffffff8211156142e4576142e36146e5565b5b6142ed82614732565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061435d826144d1565b9150614368836144d1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561439d5761439c6145fa565b5b828201905092915050565b60006143b3826144d1565b91506143be836144d1565b9250826143ce576143cd614629565b5b828204905092915050565b60006143e4826144d1565b91506143ef836144d1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614428576144276145fa565b5b828202905092915050565b600061443e826144d1565b9150614449836144d1565b92508282101561445c5761445b6145fa565b5b828203905092915050565b6000614472826144b1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145085780820151818401526020810190506144ed565b83811115614517576000848401525b50505050565b6000600282049050600182168061453557607f821691505b6020821081141561454957614548614658565b5b50919050565b61455882614732565b810181811067ffffffffffffffff82111715614577576145766146e5565b5b80604052505050565b600061458b826144d1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145be576145bd6145fa565b5b600182019050919050565b60006145d4826144d1565b91506145df836144d1565b9250826145ef576145ee614629565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c65206e6f74207374617274656420796574000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f416d6f756e74206578636565646564207478206c696d69740000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5468697320747820776f756c6420657863656564206d617820737570706c7900600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74696e672069732063757272656e746c7920696e616374697665000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4e6f7420656e6f756768204554482073656e7400000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616e6e6f74206275793a2045786365656473207075726368617365206c696d60008201527f6974210000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614d8781614467565b8114614d9257600080fd5b50565b614d9e81614479565b8114614da957600080fd5b50565b614db581614485565b8114614dc057600080fd5b50565b614dcc816144d1565b8114614dd757600080fd5b5056fea26469706673582212205b92b5fcddd69b8e7a53f4416db63d8db9d334978ea54f5dea22f4433095ee7264736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000061be841000000000000000000000000000000000000000000000000000000000000000800000000000000000000000005945baf9272e0808165adea61b932ec1604fb161000000000000000000000000000000000000000000000000000000000001518000000000000000000000000000000000000000000000000000000000000000186170692e636f6f6c636174736e66742e636f6d2f6361742f0000000000000000
-----Decoded View---------------
Arg [0] : mintingStart (uint256): 1639875600
Arg [1] : _uri (string): api.coolcatsnft.com/cat/
Arg [2] : poeToken (address): 0x5945bAF9272e0808165aDea61b932eC1604FB161
Arg [3] : buffer (uint256): 86400
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000061be8410
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000005945baf9272e0808165adea61b932ec1604fb161
Arg [3] : 0000000000000000000000000000000000000000000000000000000000015180
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [5] : 6170692e636f6f6c636174736e66742e636f6d2f6361742f0000000000000000
Deployed Bytecode Sourcemap
51515:4509:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45367:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32497:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34056:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33579:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52544:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46007:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34946:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45675:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51617:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51649:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53029:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35356:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46197:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52322:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54527:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32191:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55627:388;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51989:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31921:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2383:94;;;;;;;;;;;;;:::i;:::-;;52733:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55051:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1732:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55302:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32666:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51835:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52836:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51781:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53143:980;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34349:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51908:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51738:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35612:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54704:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51695:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51883:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55175:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51945:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54135:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34715:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2632:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52441:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55429:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45367:224;45469:4;45508:35;45493:50;;;:11;:50;;;;:90;;;;45547:36;45571:11;45547:23;:36::i;:::-;45493:90;45486:97;;45367:224;;;:::o;32497:100::-;32551:13;32584:5;32577:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32497:100;:::o;34056:221::-;34132:7;34160:16;34168:7;34160;:16::i;:::-;34152:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34245:15;:24;34261:7;34245:24;;;;;;;;;;;;;;;;;;;;;34238:31;;34056:221;;;:::o;33579:411::-;33660:13;33676:23;33691:7;33676:14;:23::i;:::-;33660:39;;33724:5;33718:11;;:2;:11;;;;33710:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33818:5;33802:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33827:37;33844:5;33851:12;:10;:12::i;:::-;33827:16;:37::i;:::-;33802:62;33780:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;33961:21;33970:2;33974:7;33961:8;:21::i;:::-;33649:341;33579:411;;:::o;52544:181::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52629:6:::1;52624:94;52645:6;;:13;;52641:1;:17;52624:94;;;52702:4;52679:9;:20;52689:6;;52696:1;52689:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;52679:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;52660:3;;;;;:::i;:::-;;;;52624:94;;;;52544:181:::0;;:::o;46007:113::-;46068:7;46095:10;:17;;;;46088:24;;46007:113;:::o;34946:339::-;35141:41;35160:12;:10;:12::i;:::-;35174:7;35141:18;:41::i;:::-;35133:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35249:28;35259:4;35265:2;35269:7;35249:9;:28::i;:::-;34946:339;;;:::o;45675:256::-;45772:7;45808:23;45825:5;45808:16;:23::i;:::-;45800:5;:31;45792:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;45897:12;:19;45910:5;45897:19;;;;;;;;;;;;;;;:26;45917:5;45897:26;;;;;;;;;;;;45890:33;;45675:256;;;;:::o;51617:25::-;;;;;;;;;;;;;:::o;51649:39::-;;;;:::o;53029:106::-;53088:4;53111:9;:16;53121:5;53111:16;;;;;;;;;;;;;;;;;;;;;;;;;53104:23;;53029:106;;;:::o;35356:185::-;35494:39;35511:4;35517:2;35521:7;35494:39;;;;;;;;;;;;:16;:39::i;:::-;35356:185;;;:::o;46197:233::-;46272:7;46308:30;:28;:30::i;:::-;46300:5;:38;46292:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;46405:10;46416:5;46405:17;;;;;;;;:::i;:::-;;;;;;;;;;46398:24;;46197:233;;;:::o;52322:111::-;52380:7;52406:12;:19;52419:5;52406:19;;;;;;;;;;;;;;;;52399:26;;52322:111;;;:::o;54527:102::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54611:10:::1;54601:7;:20;;;;;;;;;;;;:::i;:::-;;54527:102:::0;:::o;32191:239::-;32263:7;32283:13;32299:7;:16;32307:7;32299:16;;;;;;;;;;;;;;;;;;;;;32283:32;;32351:1;32334:19;;:5;:19;;;;32326:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32417:5;32410:12;;;32191:239;;;:::o;55627:388::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55694:12:::1;55709:21;55694:36;;55741:15;55759:17;55771:4;55759:7;:11;;:17;;;;:::i;:::-;55741:35;;55787:13;55803:20;55818:4;55803:10;:14;;:20;;;;:::i;:::-;55787:36;;55878:12;55893:21;55905:8;55893:7;:11;;:21;;;;:::i;:::-;55878:36;;55933:10;55925:28;;:37;55954:7;55925:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;55981:6;55973:24;;:34;55998:8;55973:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;55683:332;;;;55627:388:::0;:::o;51989:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31921:208::-;31993:7;32038:1;32021:19;;:5;:19;;;;32013:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32105:9;:16;32115:5;32105:16;;;;;;;;;;;;;;;;32098:23;;31921:208;;;:::o;2383:94::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2448:21:::1;2466:1;2448:9;:21::i;:::-;2383:94::o:0;52733:95::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52815:5:::1;52798:9;:14;52808:3;52798:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;52733:95:::0;:::o;55051:116::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55144:15:::1;55129:12;:30;;;;55051:116:::0;:::o;1732:87::-;1778:7;1805:6;;;;;;;;;;;1798:13;;1732:87;:::o;55302:119::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55401:12:::1;55377:21;:36;;;;55302:119:::0;:::o;32666:104::-;32722:13;32755:7;32748:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32666:104;:::o;51835:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;52836:185::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52924:6:::1;52919:95;52940:6;;:13;;52936:1;:17;52919:95;;;52997:5;52974:9;:20;52984:6;;52991:1;52984:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;52974:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;52955:3;;;;;:::i;:::-;;;;52919:95;;;;52836:185:::0;;:::o;51781:47::-;;;;;;;;;;;;;;;;;:::o;53143:980::-;53225:4;53208:21;;:13;;;;;;;;;;;:21;;;53200:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;53307:15;53282:21;;:40;;:197;;;;53378:1;53349:3;;;;;;;;;;;53342:21;;;53364:10;53342:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;:66;;;;53383:25;53397:10;53383:13;:25::i;:::-;53342:66;53341:137;;;;;53457:21;;53444:9;;53426:15;:27;;;;:::i;:::-;:52;;53341:137;53282:197;53274:230;;;;;;;;;;;;:::i;:::-;;;;;;;;;53582:17;;53571:7;:28;;53563:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;53677:9;;53647:26;53665:7;53647:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:39;;53639:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;53754:25;53771:7;53754:12;;:16;;:25;;;;:::i;:::-;53741:9;:38;;53733:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;53860:17;;53849:7;53822:24;53835:10;53822:12;:24::i;:::-;:34;;;;:::i;:::-;:55;;53814:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;53928:15;53946:13;:11;:13::i;:::-;53928:31;;53976:9;53972:98;53995:7;53991:1;:11;53972:98;;;54024:34;54034:10;54056:1;54046:7;:11;;;;:::i;:::-;54024:9;:34::i;:::-;54004:3;;;;;:::i;:::-;;;;53972:98;;;;54108:7;54080:12;:24;54093:10;54080:24;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;53189:934;53143:980;:::o;34349:295::-;34464:12;:10;:12::i;:::-;34452:24;;:8;:24;;;;34444:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34564:8;34519:18;:32;34538:12;:10;:12::i;:::-;34519:32;;;;;;;;;;;;;;;:42;34552:8;34519:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34617:8;34588:48;;34603:12;:10;:12::i;:::-;34588:48;;;34627:8;34588:48;;;;;;:::i;:::-;;;;;;;;34349:295;;:::o;51908:24::-;;;;:::o;51738:36::-;;;;:::o;35612:328::-;35787:41;35806:12;:10;:12::i;:::-;35820:7;35787:18;:41::i;:::-;35779:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35893:39;35907:4;35913:2;35917:7;35926:5;35893:13;:39::i;:::-;35612:328;;;;:::o;54704:335::-;54777:13;54811:16;54819:7;54811;:16::i;:::-;54803:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;54923:1;54905:7;54899:21;;;;;:::i;:::-;;;:25;:132;;;;;;;;;;;;;;;;;54964:7;54973:29;55000:1;54990:7;:11;;;;:::i;:::-;54973:16;:29::i;:::-;54947:65;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54899:132;54892:139;;54704:335;;;:::o;51695:36::-;;;;:::o;51883:18::-;;;;;;;;;;;;;:::o;55175:115::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55267:15:::1;55251:13;;:31;;;;;;;;;;;;;;;;;;55175:115:::0;:::o;51945:31::-;;;;:::o;54135:341::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54255:9:::1;;54225:26;54243:7;54225:13;:11;:13::i;:::-;:17;;:26;;;;:::i;:::-;:39;;54217:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;54321:15;54339:13;:11;:13::i;:::-;54321:31;;54367:9;54363:96;54386:7;54382:1;:11;54363:96;;;54415:32;54425:8;54445:1;54435:7;:11;;;;:::i;:::-;54415:9;:32::i;:::-;54395:3;;;;;:::i;:::-;;;;54363:96;;;;54206:270;54135:341:::0;;:::o;34715:164::-;34812:4;34836:18;:25;34855:5;34836:25;;;;;;;;;;;;;;;:35;34862:8;34836:35;;;;;;;;;;;;;;;;;;;;;;;;;34829:42;;34715:164;;;;:::o;2632:192::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2741:1:::1;2721:22;;:8;:22;;;;2713:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2797:19;2807:8;2797:9;:19::i;:::-;2632:192:::0;:::o;52441:95::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52524:4:::1;52505:9;:16;52515:5;52505:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;52441:95:::0;:::o;55429:114::-;1963:12;:10;:12::i;:::-;1952:23;;:7;:5;:7::i;:::-;:23;;;1944:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55526:9:::1;55506:17;:29;;;;55429:114:::0;:::o;31552:305::-;31654:4;31706:25;31691:40;;;:11;:40;;;;:105;;;;31763:33;31748:48;;;:11;:48;;;;31691:105;:158;;;;31813:36;31837:11;31813:23;:36::i;:::-;31691:158;31671:178;;31552:305;;;:::o;37450:127::-;37515:4;37567:1;37539:30;;:7;:16;37547:7;37539:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37532:37;;37450:127;;;:::o;604:98::-;657:7;684:10;677:17;;604:98;:::o;41432:174::-;41534:2;41507:15;:24;41523:7;41507:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41590:7;41586:2;41552:46;;41561:23;41576:7;41561:14;:23::i;:::-;41552:46;;;;;;;;;;;;41432:174;;:::o;37744:348::-;37837:4;37862:16;37870:7;37862;:16::i;:::-;37854:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37938:13;37954:23;37969:7;37954:14;:23::i;:::-;37938:39;;38007:5;37996:16;;:7;:16;;;:51;;;;38040:7;38016:31;;:20;38028:7;38016:11;:20::i;:::-;:31;;;37996:51;:87;;;;38051:32;38068:5;38075:7;38051:16;:32::i;:::-;37996:87;37988:96;;;37744:348;;;;:::o;40736:578::-;40895:4;40868:31;;:23;40883:7;40868:14;:23::i;:::-;:31;;;40860:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40978:1;40964:16;;:2;:16;;;;40956:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41034:39;41055:4;41061:2;41065:7;41034:20;:39::i;:::-;41138:29;41155:1;41159:7;41138:8;:29::i;:::-;41199:1;41180:9;:15;41190:4;41180:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;41228:1;41211:9;:13;41221:2;41211:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41259:2;41240:7;:16;41248:7;41240:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41298:7;41294:2;41279:27;;41288:4;41279:27;;;;;;;;;;;;40736:578;;;:::o;6296:98::-;6354:7;6385:1;6381;:5;;;;:::i;:::-;6374:12;;6296:98;;;;:::o;6695:::-;6753:7;6784:1;6780;:5;;;;:::i;:::-;6773:12;;6695:98;;;;:::o;5939:::-;5997:7;6028:1;6024;:5;;;;:::i;:::-;6017:12;;5939:98;;;;:::o;2832:173::-;2888:16;2907:6;;;;;;;;;;;2888:25;;2933:8;2924:6;;:17;;;;;;;;;;;;;;;;;;2988:8;2957:40;;2978:8;2957:40;;;;;;;;;;;;2877:128;2832:173;:::o;5558:98::-;5616:7;5647:1;5643;:5;;;;:::i;:::-;5636:12;;5558:98;;;;:::o;38434:110::-;38510:26;38520:2;38524:7;38510:26;;;;;;;;;;;;:9;:26::i;:::-;38434:110;;:::o;36822:315::-;36979:28;36989:4;36995:2;36999:7;36979:9;:28::i;:::-;37026:48;37049:4;37055:2;37059:7;37068:5;37026:22;:48::i;:::-;37018:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36822:315;;;;:::o;24908:723::-;24964:13;25194:1;25185:5;:10;25181:53;;;25212:10;;;;;;;;;;;;;;;;;;;;;25181:53;25244:12;25259:5;25244:20;;25275:14;25300:78;25315:1;25307:4;:9;25300:78;;25333:8;;;;;:::i;:::-;;;;25364:2;25356:10;;;;;:::i;:::-;;;25300:78;;;25388:19;25420:6;25410:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25388:39;;25438:154;25454:1;25445:5;:10;25438:154;;25482:1;25472:11;;;;;:::i;:::-;;;25549:2;25541:5;:10;;;;:::i;:::-;25528:2;:24;;;;:::i;:::-;25515:39;;25498:6;25505;25498:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;25578:2;25569:11;;;;;:::i;:::-;;;25438:154;;;25616:6;25602:21;;;;;24908:723;;;;:::o;30159:157::-;30244:4;30283:25;30268:40;;;:11;:40;;;;30261:47;;30159:157;;;:::o;47043:589::-;47187:45;47214:4;47220:2;47224:7;47187:26;:45::i;:::-;47265:1;47249:18;;:4;:18;;;47245:187;;;47284:40;47316:7;47284:31;:40::i;:::-;47245:187;;;47354:2;47346:10;;:4;:10;;;47342:90;;47373:47;47406:4;47412:7;47373:32;:47::i;:::-;47342:90;47245:187;47460:1;47446:16;;:2;:16;;;47442:183;;;47479:45;47516:7;47479:36;:45::i;:::-;47442:183;;;47552:4;47546:10;;:2;:10;;;47542:83;;47573:40;47601:2;47605:7;47573:27;:40::i;:::-;47542:83;47442:183;47043:589;;;:::o;38771:321::-;38901:18;38907:2;38911:7;38901:5;:18::i;:::-;38952:54;38983:1;38987:2;38991:7;39000:5;38952:22;:54::i;:::-;38930:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;38771:321;;;:::o;42171:799::-;42326:4;42347:15;:2;:13;;;:15::i;:::-;42343:620;;;42399:2;42383:36;;;42420:12;:10;:12::i;:::-;42434:4;42440:7;42449:5;42383:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42379:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42642:1;42625:6;:13;:18;42621:272;;;42668:60;;;;;;;;;;:::i;:::-;;;;;;;;42621:272;42843:6;42837:13;42828:6;42824:2;42820:15;42813:38;42379:529;42516:41;;;42506:51;;;:6;:51;;;;42499:58;;;;;42343:620;42947:4;42940:11;;42171:799;;;;;;;:::o;43542:126::-;;;;:::o;48355:164::-;48459:10;:17;;;;48432:15;:24;48448:7;48432:24;;;;;;;;;;;:44;;;;48487:10;48503:7;48487:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48355:164;:::o;49146:988::-;49412:22;49462:1;49437:22;49454:4;49437:16;:22::i;:::-;:26;;;;:::i;:::-;49412:51;;49474:18;49495:17;:26;49513:7;49495:26;;;;;;;;;;;;49474:47;;49642:14;49628:10;:28;49624:328;;49673:19;49695:12;:18;49708:4;49695:18;;;;;;;;;;;;;;;:34;49714:14;49695:34;;;;;;;;;;;;49673:56;;49779:11;49746:12;:18;49759:4;49746:18;;;;;;;;;;;;;;;:30;49765:10;49746:30;;;;;;;;;;;:44;;;;49896:10;49863:17;:30;49881:11;49863:30;;;;;;;;;;;:43;;;;49658:294;49624:328;50048:17;:26;50066:7;50048:26;;;;;;;;;;;50041:33;;;50092:12;:18;50105:4;50092:18;;;;;;;;;;;;;;;:34;50111:14;50092:34;;;;;;;;;;;50085:41;;;49227:907;;49146:988;;:::o;50429:1079::-;50682:22;50727:1;50707:10;:17;;;;:21;;;;:::i;:::-;50682:46;;50739:18;50760:15;:24;50776:7;50760:24;;;;;;;;;;;;50739:45;;51111:19;51133:10;51144:14;51133:26;;;;;;;;:::i;:::-;;;;;;;;;;51111:48;;51197:11;51172:10;51183;51172:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;51308:10;51277:15;:28;51293:11;51277:28;;;;;;;;;;;:41;;;;51449:15;:24;51465:7;51449:24;;;;;;;;;;;51442:31;;;51484:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;50500:1008;;;50429:1079;:::o;47933:221::-;48018:14;48035:20;48052:2;48035:16;:20::i;:::-;48018:37;;48093:7;48066:12;:16;48079:2;48066:16;;;;;;;;;;;;;;;:24;48083:6;48066:24;;;;;;;;;;;:34;;;;48140:6;48111:17;:26;48129:7;48111:26;;;;;;;;;;;:35;;;;48007:147;47933:221;;:::o;39428:382::-;39522:1;39508:16;;:2;:16;;;;39500:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39581:16;39589:7;39581;:16::i;:::-;39580:17;39572:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39643:45;39672:1;39676:2;39680:7;39643:20;:45::i;:::-;39718:1;39701:9;:13;39711:2;39701:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39749:2;39730:7;:16;39738:7;39730:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39794:7;39790:2;39769:33;;39786:1;39769:33;;;;;;;;;;;;39428:382;;:::o;17349:387::-;17409:4;17617:12;17684:7;17672:20;17664:28;;17727:1;17720:4;:8;17713:15;;;17349:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:143::-;2925:5;2956:6;2950:13;2941:22;;2972:33;2999:5;2972:33;:::i;:::-;2868:143;;;;:::o;3017:329::-;3076:6;3125:2;3113:9;3104:7;3100:23;3096:32;3093:119;;;3131:79;;:::i;:::-;3093:119;3251:1;3276:53;3321:7;3312:6;3301:9;3297:22;3276:53;:::i;:::-;3266:63;;3222:117;3017:329;;;;:::o;3352:474::-;3420:6;3428;3477:2;3465:9;3456:7;3452:23;3448:32;3445:119;;;3483:79;;:::i;:::-;3445:119;3603:1;3628:53;3673:7;3664:6;3653:9;3649:22;3628:53;:::i;:::-;3618:63;;3574:117;3730:2;3756:53;3801:7;3792:6;3781:9;3777:22;3756:53;:::i;:::-;3746:63;;3701:118;3352:474;;;;;:::o;3832:619::-;3909:6;3917;3925;3974:2;3962:9;3953:7;3949:23;3945:32;3942:119;;;3980:79;;:::i;:::-;3942:119;4100:1;4125:53;4170:7;4161:6;4150:9;4146:22;4125:53;:::i;:::-;4115:63;;4071:117;4227:2;4253:53;4298:7;4289:6;4278:9;4274:22;4253:53;:::i;:::-;4243:63;;4198:118;4355:2;4381:53;4426:7;4417:6;4406:9;4402:22;4381:53;:::i;:::-;4371:63;;4326:118;3832:619;;;;;:::o;4457:943::-;4552:6;4560;4568;4576;4625:3;4613:9;4604:7;4600:23;4596:33;4593:120;;;4632:79;;:::i;:::-;4593:120;4752:1;4777:53;4822:7;4813:6;4802:9;4798:22;4777:53;:::i;:::-;4767:63;;4723:117;4879:2;4905:53;4950:7;4941:6;4930:9;4926:22;4905:53;:::i;:::-;4895:63;;4850:118;5007:2;5033:53;5078:7;5069:6;5058:9;5054:22;5033:53;:::i;:::-;5023:63;;4978:118;5163:2;5152:9;5148:18;5135:32;5194:18;5186:6;5183:30;5180:117;;;5216:79;;:::i;:::-;5180:117;5321:62;5375:7;5366:6;5355:9;5351:22;5321:62;:::i;:::-;5311:72;;5106:287;4457:943;;;;;;;:::o;5406:468::-;5471:6;5479;5528:2;5516:9;5507:7;5503:23;5499:32;5496:119;;;5534:79;;:::i;:::-;5496:119;5654:1;5679:53;5724:7;5715:6;5704:9;5700:22;5679:53;:::i;:::-;5669:63;;5625:117;5781:2;5807:50;5849:7;5840:6;5829:9;5825:22;5807:50;:::i;:::-;5797:60;;5752:115;5406:468;;;;;:::o;5880:474::-;5948:6;5956;6005:2;5993:9;5984:7;5980:23;5976:32;5973:119;;;6011:79;;:::i;:::-;5973:119;6131:1;6156:53;6201:7;6192:6;6181:9;6177:22;6156:53;:::i;:::-;6146:63;;6102:117;6258:2;6284:53;6329:7;6320:6;6309:9;6305:22;6284:53;:::i;:::-;6274:63;;6229:118;5880:474;;;;;:::o;6360:559::-;6446:6;6454;6503:2;6491:9;6482:7;6478:23;6474:32;6471:119;;;6509:79;;:::i;:::-;6471:119;6657:1;6646:9;6642:17;6629:31;6687:18;6679:6;6676:30;6673:117;;;6709:79;;:::i;:::-;6673:117;6822:80;6894:7;6885:6;6874:9;6870:22;6822:80;:::i;:::-;6804:98;;;;6600:312;6360:559;;;;;:::o;6925:323::-;6981:6;7030:2;7018:9;7009:7;7005:23;7001:32;6998:119;;;7036:79;;:::i;:::-;6998:119;7156:1;7181:50;7223:7;7214:6;7203:9;7199:22;7181:50;:::i;:::-;7171:60;;7127:114;6925:323;;;;:::o;7254:327::-;7312:6;7361:2;7349:9;7340:7;7336:23;7332:32;7329:119;;;7367:79;;:::i;:::-;7329:119;7487:1;7512:52;7556:7;7547:6;7536:9;7532:22;7512:52;:::i;:::-;7502:62;;7458:116;7254:327;;;;:::o;7587:349::-;7656:6;7705:2;7693:9;7684:7;7680:23;7676:32;7673:119;;;7711:79;;:::i;:::-;7673:119;7831:1;7856:63;7911:7;7902:6;7891:9;7887:22;7856:63;:::i;:::-;7846:73;;7802:127;7587:349;;;;:::o;7942:509::-;8011:6;8060:2;8048:9;8039:7;8035:23;8031:32;8028:119;;;8066:79;;:::i;:::-;8028:119;8214:1;8203:9;8199:17;8186:31;8244:18;8236:6;8233:30;8230:117;;;8266:79;;:::i;:::-;8230:117;8371:63;8426:7;8417:6;8406:9;8402:22;8371:63;:::i;:::-;8361:73;;8157:287;7942:509;;;;:::o;8457:329::-;8516:6;8565:2;8553:9;8544:7;8540:23;8536:32;8533:119;;;8571:79;;:::i;:::-;8533:119;8691:1;8716:53;8761:7;8752:6;8741:9;8737:22;8716:53;:::i;:::-;8706:63;;8662:117;8457:329;;;;:::o;8792:351::-;8862:6;8911:2;8899:9;8890:7;8886:23;8882:32;8879:119;;;8917:79;;:::i;:::-;8879:119;9037:1;9062:64;9118:7;9109:6;9098:9;9094:22;9062:64;:::i;:::-;9052:74;;9008:128;8792:351;;;;:::o;9149:118::-;9236:24;9254:5;9236:24;:::i;:::-;9231:3;9224:37;9149:118;;:::o;9273:109::-;9354:21;9369:5;9354:21;:::i;:::-;9349:3;9342:34;9273:109;;:::o;9388:360::-;9474:3;9502:38;9534:5;9502:38;:::i;:::-;9556:70;9619:6;9614:3;9556:70;:::i;:::-;9549:77;;9635:52;9680:6;9675:3;9668:4;9661:5;9657:16;9635:52;:::i;:::-;9712:29;9734:6;9712:29;:::i;:::-;9707:3;9703:39;9696:46;;9478:270;9388:360;;;;:::o;9754:364::-;9842:3;9870:39;9903:5;9870:39;:::i;:::-;9925:71;9989:6;9984:3;9925:71;:::i;:::-;9918:78;;10005:52;10050:6;10045:3;10038:4;10031:5;10027:16;10005:52;:::i;:::-;10082:29;10104:6;10082:29;:::i;:::-;10077:3;10073:39;10066:46;;9846:272;9754:364;;;;:::o;10124:377::-;10230:3;10258:39;10291:5;10258:39;:::i;:::-;10313:89;10395:6;10390:3;10313:89;:::i;:::-;10306:96;;10411:52;10456:6;10451:3;10444:4;10437:5;10433:16;10411:52;:::i;:::-;10488:6;10483:3;10479:16;10472:23;;10234:267;10124:377;;;;:::o;10531:845::-;10634:3;10671:5;10665:12;10700:36;10726:9;10700:36;:::i;:::-;10752:89;10834:6;10829:3;10752:89;:::i;:::-;10745:96;;10872:1;10861:9;10857:17;10888:1;10883:137;;;;11034:1;11029:341;;;;10850:520;;10883:137;10967:4;10963:9;10952;10948:25;10943:3;10936:38;11003:6;10998:3;10994:16;10987:23;;10883:137;;11029:341;11096:38;11128:5;11096:38;:::i;:::-;11156:1;11170:154;11184:6;11181:1;11178:13;11170:154;;;11258:7;11252:14;11248:1;11243:3;11239:11;11232:35;11308:1;11299:7;11295:15;11284:26;;11206:4;11203:1;11199:12;11194:17;;11170:154;;;11353:6;11348:3;11344:16;11337:23;;11036:334;;10850:520;;10638:738;;10531:845;;;;:::o;11382:366::-;11524:3;11545:67;11609:2;11604:3;11545:67;:::i;:::-;11538:74;;11621:93;11710:3;11621:93;:::i;:::-;11739:2;11734:3;11730:12;11723:19;;11382:366;;;:::o;11754:::-;11896:3;11917:67;11981:2;11976:3;11917:67;:::i;:::-;11910:74;;11993:93;12082:3;11993:93;:::i;:::-;12111:2;12106:3;12102:12;12095:19;;11754:366;;;:::o;12126:::-;12268:3;12289:67;12353:2;12348:3;12289:67;:::i;:::-;12282:74;;12365:93;12454:3;12365:93;:::i;:::-;12483:2;12478:3;12474:12;12467:19;;12126:366;;;:::o;12498:::-;12640:3;12661:67;12725:2;12720:3;12661:67;:::i;:::-;12654:74;;12737:93;12826:3;12737:93;:::i;:::-;12855:2;12850:3;12846:12;12839:19;;12498:366;;;:::o;12870:::-;13012:3;13033:67;13097:2;13092:3;13033:67;:::i;:::-;13026:74;;13109:93;13198:3;13109:93;:::i;:::-;13227:2;13222:3;13218:12;13211:19;;12870:366;;;:::o;13242:::-;13384:3;13405:67;13469:2;13464:3;13405:67;:::i;:::-;13398:74;;13481:93;13570:3;13481:93;:::i;:::-;13599:2;13594:3;13590:12;13583:19;;13242:366;;;:::o;13614:::-;13756:3;13777:67;13841:2;13836:3;13777:67;:::i;:::-;13770:74;;13853:93;13942:3;13853:93;:::i;:::-;13971:2;13966:3;13962:12;13955:19;;13614:366;;;:::o;13986:::-;14128:3;14149:67;14213:2;14208:3;14149:67;:::i;:::-;14142:74;;14225:93;14314:3;14225:93;:::i;:::-;14343:2;14338:3;14334:12;14327:19;;13986:366;;;:::o;14358:::-;14500:3;14521:67;14585:2;14580:3;14521:67;:::i;:::-;14514:74;;14597:93;14686:3;14597:93;:::i;:::-;14715:2;14710:3;14706:12;14699:19;;14358:366;;;:::o;14730:::-;14872:3;14893:67;14957:2;14952:3;14893:67;:::i;:::-;14886:74;;14969:93;15058:3;14969:93;:::i;:::-;15087:2;15082:3;15078:12;15071:19;;14730:366;;;:::o;15102:::-;15244:3;15265:67;15329:2;15324:3;15265:67;:::i;:::-;15258:74;;15341:93;15430:3;15341:93;:::i;:::-;15459:2;15454:3;15450:12;15443:19;;15102:366;;;:::o;15474:::-;15616:3;15637:67;15701:2;15696:3;15637:67;:::i;:::-;15630:74;;15713:93;15802:3;15713:93;:::i;:::-;15831:2;15826:3;15822:12;15815:19;;15474:366;;;:::o;15846:::-;15988:3;16009:67;16073:2;16068:3;16009:67;:::i;:::-;16002:74;;16085:93;16174:3;16085:93;:::i;:::-;16203:2;16198:3;16194:12;16187:19;;15846:366;;;:::o;16218:::-;16360:3;16381:67;16445:2;16440:3;16381:67;:::i;:::-;16374:74;;16457:93;16546:3;16457:93;:::i;:::-;16575:2;16570:3;16566:12;16559:19;;16218:366;;;:::o;16590:::-;16732:3;16753:67;16817:2;16812:3;16753:67;:::i;:::-;16746:74;;16829:93;16918:3;16829:93;:::i;:::-;16947:2;16942:3;16938:12;16931:19;;16590:366;;;:::o;16962:::-;17104:3;17125:67;17189:2;17184:3;17125:67;:::i;:::-;17118:74;;17201:93;17290:3;17201:93;:::i;:::-;17319:2;17314:3;17310:12;17303:19;;16962:366;;;:::o;17334:400::-;17494:3;17515:84;17597:1;17592:3;17515:84;:::i;:::-;17508:91;;17608:93;17697:3;17608:93;:::i;:::-;17726:1;17721:3;17717:11;17710:18;;17334:400;;;:::o;17740:366::-;17882:3;17903:67;17967:2;17962:3;17903:67;:::i;:::-;17896:74;;17979:93;18068:3;17979:93;:::i;:::-;18097:2;18092:3;18088:12;18081:19;;17740:366;;;:::o;18112:::-;18254:3;18275:67;18339:2;18334:3;18275:67;:::i;:::-;18268:74;;18351:93;18440:3;18351:93;:::i;:::-;18469:2;18464:3;18460:12;18453:19;;18112:366;;;:::o;18484:::-;18626:3;18647:67;18711:2;18706:3;18647:67;:::i;:::-;18640:74;;18723:93;18812:3;18723:93;:::i;:::-;18841:2;18836:3;18832:12;18825:19;;18484:366;;;:::o;18856:::-;18998:3;19019:67;19083:2;19078:3;19019:67;:::i;:::-;19012:74;;19095:93;19184:3;19095:93;:::i;:::-;19213:2;19208:3;19204:12;19197:19;;18856:366;;;:::o;19228:::-;19370:3;19391:67;19455:2;19450:3;19391:67;:::i;:::-;19384:74;;19467:93;19556:3;19467:93;:::i;:::-;19585:2;19580:3;19576:12;19569:19;;19228:366;;;:::o;19600:::-;19742:3;19763:67;19827:2;19822:3;19763:67;:::i;:::-;19756:74;;19839:93;19928:3;19839:93;:::i;:::-;19957:2;19952:3;19948:12;19941:19;;19600:366;;;:::o;19972:::-;20114:3;20135:67;20199:2;20194:3;20135:67;:::i;:::-;20128:74;;20211:93;20300:3;20211:93;:::i;:::-;20329:2;20324:3;20320:12;20313:19;;19972:366;;;:::o;20344:::-;20486:3;20507:67;20571:2;20566:3;20507:67;:::i;:::-;20500:74;;20583:93;20672:3;20583:93;:::i;:::-;20701:2;20696:3;20692:12;20685:19;;20344:366;;;:::o;20716:118::-;20803:24;20821:5;20803:24;:::i;:::-;20798:3;20791:37;20716:118;;:::o;20840:695::-;21118:3;21140:92;21228:3;21219:6;21140:92;:::i;:::-;21133:99;;21249:95;21340:3;21331:6;21249:95;:::i;:::-;21242:102;;21361:148;21505:3;21361:148;:::i;:::-;21354:155;;21526:3;21519:10;;20840:695;;;;;:::o;21541:222::-;21634:4;21672:2;21661:9;21657:18;21649:26;;21685:71;21753:1;21742:9;21738:17;21729:6;21685:71;:::i;:::-;21541:222;;;;:::o;21769:640::-;21964:4;22002:3;21991:9;21987:19;21979:27;;22016:71;22084:1;22073:9;22069:17;22060:6;22016:71;:::i;:::-;22097:72;22165:2;22154:9;22150:18;22141:6;22097:72;:::i;:::-;22179;22247:2;22236:9;22232:18;22223:6;22179:72;:::i;:::-;22298:9;22292:4;22288:20;22283:2;22272:9;22268:18;22261:48;22326:76;22397:4;22388:6;22326:76;:::i;:::-;22318:84;;21769:640;;;;;;;:::o;22415:210::-;22502:4;22540:2;22529:9;22525:18;22517:26;;22553:65;22615:1;22604:9;22600:17;22591:6;22553:65;:::i;:::-;22415:210;;;;:::o;22631:313::-;22744:4;22782:2;22771:9;22767:18;22759:26;;22831:9;22825:4;22821:20;22817:1;22806:9;22802:17;22795:47;22859:78;22932:4;22923:6;22859:78;:::i;:::-;22851:86;;22631:313;;;;:::o;22950:419::-;23116:4;23154:2;23143:9;23139:18;23131:26;;23203:9;23197:4;23193:20;23189:1;23178:9;23174:17;23167:47;23231:131;23357:4;23231:131;:::i;:::-;23223:139;;22950:419;;;:::o;23375:::-;23541:4;23579:2;23568:9;23564:18;23556:26;;23628:9;23622:4;23618:20;23614:1;23603:9;23599:17;23592:47;23656:131;23782:4;23656:131;:::i;:::-;23648:139;;23375:419;;;:::o;23800:::-;23966:4;24004:2;23993:9;23989:18;23981:26;;24053:9;24047:4;24043:20;24039:1;24028:9;24024:17;24017:47;24081:131;24207:4;24081:131;:::i;:::-;24073:139;;23800:419;;;:::o;24225:::-;24391:4;24429:2;24418:9;24414:18;24406:26;;24478:9;24472:4;24468:20;24464:1;24453:9;24449:17;24442:47;24506:131;24632:4;24506:131;:::i;:::-;24498:139;;24225:419;;;:::o;24650:::-;24816:4;24854:2;24843:9;24839:18;24831:26;;24903:9;24897:4;24893:20;24889:1;24878:9;24874:17;24867:47;24931:131;25057:4;24931:131;:::i;:::-;24923:139;;24650:419;;;:::o;25075:::-;25241:4;25279:2;25268:9;25264:18;25256:26;;25328:9;25322:4;25318:20;25314:1;25303:9;25299:17;25292:47;25356:131;25482:4;25356:131;:::i;:::-;25348:139;;25075:419;;;:::o;25500:::-;25666:4;25704:2;25693:9;25689:18;25681:26;;25753:9;25747:4;25743:20;25739:1;25728:9;25724:17;25717:47;25781:131;25907:4;25781:131;:::i;:::-;25773:139;;25500:419;;;:::o;25925:::-;26091:4;26129:2;26118:9;26114:18;26106:26;;26178:9;26172:4;26168:20;26164:1;26153:9;26149:17;26142:47;26206:131;26332:4;26206:131;:::i;:::-;26198:139;;25925:419;;;:::o;26350:::-;26516:4;26554:2;26543:9;26539:18;26531:26;;26603:9;26597:4;26593:20;26589:1;26578:9;26574:17;26567:47;26631:131;26757:4;26631:131;:::i;:::-;26623:139;;26350:419;;;:::o;26775:::-;26941:4;26979:2;26968:9;26964:18;26956:26;;27028:9;27022:4;27018:20;27014:1;27003:9;26999:17;26992:47;27056:131;27182:4;27056:131;:::i;:::-;27048:139;;26775:419;;;:::o;27200:::-;27366:4;27404:2;27393:9;27389:18;27381:26;;27453:9;27447:4;27443:20;27439:1;27428:9;27424:17;27417:47;27481:131;27607:4;27481:131;:::i;:::-;27473:139;;27200:419;;;:::o;27625:::-;27791:4;27829:2;27818:9;27814:18;27806:26;;27878:9;27872:4;27868:20;27864:1;27853:9;27849:17;27842:47;27906:131;28032:4;27906:131;:::i;:::-;27898:139;;27625:419;;;:::o;28050:::-;28216:4;28254:2;28243:9;28239:18;28231:26;;28303:9;28297:4;28293:20;28289:1;28278:9;28274:17;28267:47;28331:131;28457:4;28331:131;:::i;:::-;28323:139;;28050:419;;;:::o;28475:::-;28641:4;28679:2;28668:9;28664:18;28656:26;;28728:9;28722:4;28718:20;28714:1;28703:9;28699:17;28692:47;28756:131;28882:4;28756:131;:::i;:::-;28748:139;;28475:419;;;:::o;28900:::-;29066:4;29104:2;29093:9;29089:18;29081:26;;29153:9;29147:4;29143:20;29139:1;29128:9;29124:17;29117:47;29181:131;29307:4;29181:131;:::i;:::-;29173:139;;28900:419;;;:::o;29325:::-;29491:4;29529:2;29518:9;29514:18;29506:26;;29578:9;29572:4;29568:20;29564:1;29553:9;29549:17;29542:47;29606:131;29732:4;29606:131;:::i;:::-;29598:139;;29325:419;;;:::o;29750:::-;29916:4;29954:2;29943:9;29939:18;29931:26;;30003:9;29997:4;29993:20;29989:1;29978:9;29974:17;29967:47;30031:131;30157:4;30031:131;:::i;:::-;30023:139;;29750:419;;;:::o;30175:::-;30341:4;30379:2;30368:9;30364:18;30356:26;;30428:9;30422:4;30418:20;30414:1;30403:9;30399:17;30392:47;30456:131;30582:4;30456:131;:::i;:::-;30448:139;;30175:419;;;:::o;30600:::-;30766:4;30804:2;30793:9;30789:18;30781:26;;30853:9;30847:4;30843:20;30839:1;30828:9;30824:17;30817:47;30881:131;31007:4;30881:131;:::i;:::-;30873:139;;30600:419;;;:::o;31025:::-;31191:4;31229:2;31218:9;31214:18;31206:26;;31278:9;31272:4;31268:20;31264:1;31253:9;31249:17;31242:47;31306:131;31432:4;31306:131;:::i;:::-;31298:139;;31025:419;;;:::o;31450:::-;31616:4;31654:2;31643:9;31639:18;31631:26;;31703:9;31697:4;31693:20;31689:1;31678:9;31674:17;31667:47;31731:131;31857:4;31731:131;:::i;:::-;31723:139;;31450:419;;;:::o;31875:::-;32041:4;32079:2;32068:9;32064:18;32056:26;;32128:9;32122:4;32118:20;32114:1;32103:9;32099:17;32092:47;32156:131;32282:4;32156:131;:::i;:::-;32148:139;;31875:419;;;:::o;32300:::-;32466:4;32504:2;32493:9;32489:18;32481:26;;32553:9;32547:4;32543:20;32539:1;32528:9;32524:17;32517:47;32581:131;32707:4;32581:131;:::i;:::-;32573:139;;32300:419;;;:::o;32725:::-;32891:4;32929:2;32918:9;32914:18;32906:26;;32978:9;32972:4;32968:20;32964:1;32953:9;32949:17;32942:47;33006:131;33132:4;33006:131;:::i;:::-;32998:139;;32725:419;;;:::o;33150:222::-;33243:4;33281:2;33270:9;33266:18;33258:26;;33294:71;33362:1;33351:9;33347:17;33338:6;33294:71;:::i;:::-;33150:222;;;;:::o;33378:129::-;33412:6;33439:20;;:::i;:::-;33429:30;;33468:33;33496:4;33488:6;33468:33;:::i;:::-;33378:129;;;:::o;33513:75::-;33546:6;33579:2;33573:9;33563:19;;33513:75;:::o;33594:307::-;33655:4;33745:18;33737:6;33734:30;33731:56;;;33767:18;;:::i;:::-;33731:56;33805:29;33827:6;33805:29;:::i;:::-;33797:37;;33889:4;33883;33879:15;33871:23;;33594:307;;;:::o;33907:308::-;33969:4;34059:18;34051:6;34048:30;34045:56;;;34081:18;;:::i;:::-;34045:56;34119:29;34141:6;34119:29;:::i;:::-;34111:37;;34203:4;34197;34193:15;34185:23;;33907:308;;;:::o;34221:141::-;34270:4;34293:3;34285:11;;34316:3;34313:1;34306:14;34350:4;34347:1;34337:18;34329:26;;34221:141;;;:::o;34368:98::-;34419:6;34453:5;34447:12;34437:22;;34368:98;;;:::o;34472:99::-;34524:6;34558:5;34552:12;34542:22;;34472:99;;;:::o;34577:168::-;34660:11;34694:6;34689:3;34682:19;34734:4;34729:3;34725:14;34710:29;;34577:168;;;;:::o;34751:169::-;34835:11;34869:6;34864:3;34857:19;34909:4;34904:3;34900:14;34885:29;;34751:169;;;;:::o;34926:148::-;35028:11;35065:3;35050:18;;34926:148;;;;:::o;35080:305::-;35120:3;35139:20;35157:1;35139:20;:::i;:::-;35134:25;;35173:20;35191:1;35173:20;:::i;:::-;35168:25;;35327:1;35259:66;35255:74;35252:1;35249:81;35246:107;;;35333:18;;:::i;:::-;35246:107;35377:1;35374;35370:9;35363:16;;35080:305;;;;:::o;35391:185::-;35431:1;35448:20;35466:1;35448:20;:::i;:::-;35443:25;;35482:20;35500:1;35482:20;:::i;:::-;35477:25;;35521:1;35511:35;;35526:18;;:::i;:::-;35511:35;35568:1;35565;35561:9;35556:14;;35391:185;;;;:::o;35582:348::-;35622:7;35645:20;35663:1;35645:20;:::i;:::-;35640:25;;35679:20;35697:1;35679:20;:::i;:::-;35674:25;;35867:1;35799:66;35795:74;35792:1;35789:81;35784:1;35777:9;35770:17;35766:105;35763:131;;;35874:18;;:::i;:::-;35763:131;35922:1;35919;35915:9;35904:20;;35582:348;;;;:::o;35936:191::-;35976:4;35996:20;36014:1;35996:20;:::i;:::-;35991:25;;36030:20;36048:1;36030:20;:::i;:::-;36025:25;;36069:1;36066;36063:8;36060:34;;;36074:18;;:::i;:::-;36060:34;36119:1;36116;36112:9;36104:17;;35936:191;;;;:::o;36133:96::-;36170:7;36199:24;36217:5;36199:24;:::i;:::-;36188:35;;36133:96;;;:::o;36235:90::-;36269:7;36312:5;36305:13;36298:21;36287:32;;36235:90;;;:::o;36331:149::-;36367:7;36407:66;36400:5;36396:78;36385:89;;36331:149;;;:::o;36486:126::-;36523:7;36563:42;36556:5;36552:54;36541:65;;36486:126;;;:::o;36618:77::-;36655:7;36684:5;36673:16;;36618:77;;;:::o;36701:154::-;36785:6;36780:3;36775;36762:30;36847:1;36838:6;36833:3;36829:16;36822:27;36701:154;;;:::o;36861:307::-;36929:1;36939:113;36953:6;36950:1;36947:13;36939:113;;;37038:1;37033:3;37029:11;37023:18;37019:1;37014:3;37010:11;37003:39;36975:2;36972:1;36968:10;36963:15;;36939:113;;;37070:6;37067:1;37064:13;37061:101;;;37150:1;37141:6;37136:3;37132:16;37125:27;37061:101;36910:258;36861:307;;;:::o;37174:320::-;37218:6;37255:1;37249:4;37245:12;37235:22;;37302:1;37296:4;37292:12;37323:18;37313:81;;37379:4;37371:6;37367:17;37357:27;;37313:81;37441:2;37433:6;37430:14;37410:18;37407:38;37404:84;;;37460:18;;:::i;:::-;37404:84;37225:269;37174:320;;;:::o;37500:281::-;37583:27;37605:4;37583:27;:::i;:::-;37575:6;37571:40;37713:6;37701:10;37698:22;37677:18;37665:10;37662:34;37659:62;37656:88;;;37724:18;;:::i;:::-;37656:88;37764:10;37760:2;37753:22;37543:238;37500:281;;:::o;37787:233::-;37826:3;37849:24;37867:5;37849:24;:::i;:::-;37840:33;;37895:66;37888:5;37885:77;37882:103;;;37965:18;;:::i;:::-;37882:103;38012:1;38005:5;38001:13;37994:20;;37787:233;;;:::o;38026:176::-;38058:1;38075:20;38093:1;38075:20;:::i;:::-;38070:25;;38109:20;38127:1;38109:20;:::i;:::-;38104:25;;38148:1;38138:35;;38153:18;;:::i;:::-;38138:35;38194:1;38191;38187:9;38182:14;;38026:176;;;;:::o;38208:180::-;38256:77;38253:1;38246:88;38353:4;38350:1;38343:15;38377:4;38374:1;38367:15;38394:180;38442:77;38439:1;38432:88;38539:4;38536:1;38529:15;38563:4;38560:1;38553:15;38580:180;38628:77;38625:1;38618:88;38725:4;38722:1;38715:15;38749:4;38746:1;38739:15;38766:180;38814:77;38811:1;38804:88;38911:4;38908:1;38901:15;38935:4;38932:1;38925:15;38952:180;39000:77;38997:1;38990:88;39097:4;39094:1;39087:15;39121:4;39118:1;39111:15;39138:180;39186:77;39183:1;39176:88;39283:4;39280:1;39273:15;39307:4;39304:1;39297:15;39324:117;39433:1;39430;39423:12;39447:117;39556:1;39553;39546:12;39570:117;39679:1;39676;39669:12;39693:117;39802:1;39799;39792:12;39816:117;39925:1;39922;39915:12;39939:117;40048:1;40045;40038:12;40062:102;40103:6;40154:2;40150:7;40145:2;40138:5;40134:14;40130:28;40120:38;;40062:102;;;:::o;40170:170::-;40310:22;40306:1;40298:6;40294:14;40287:46;40170:170;:::o;40346:230::-;40486:34;40482:1;40474:6;40470:14;40463:58;40555:13;40550:2;40542:6;40538:15;40531:38;40346:230;:::o;40582:237::-;40722:34;40718:1;40710:6;40706:14;40699:58;40791:20;40786:2;40778:6;40774:15;40767:45;40582:237;:::o;40825:225::-;40965:34;40961:1;40953:6;40949:14;40942:58;41034:8;41029:2;41021:6;41017:15;41010:33;40825:225;:::o;41056:178::-;41196:30;41192:1;41184:6;41180:14;41173:54;41056:178;:::o;41240:174::-;41380:26;41376:1;41368:6;41364:14;41357:50;41240:174;:::o;41420:223::-;41560:34;41556:1;41548:6;41544:14;41537:58;41629:6;41624:2;41616:6;41612:15;41605:31;41420:223;:::o;41649:175::-;41789:27;41785:1;41777:6;41773:14;41766:51;41649:175;:::o;41830:181::-;41970:33;41966:1;41958:6;41954:14;41947:57;41830:181;:::o;42017:231::-;42157:34;42153:1;42145:6;42141:14;42134:58;42226:14;42221:2;42213:6;42209:15;42202:39;42017:231;:::o;42254:179::-;42394:31;42390:1;42382:6;42378:14;42371:55;42254:179;:::o;42439:243::-;42579:34;42575:1;42567:6;42563:14;42556:58;42648:26;42643:2;42635:6;42631:15;42624:51;42439:243;:::o;42688:229::-;42828:34;42824:1;42816:6;42812:14;42805:58;42897:12;42892:2;42884:6;42880:15;42873:37;42688:229;:::o;42923:228::-;43063:34;43059:1;43051:6;43047:14;43040:58;43132:11;43127:2;43119:6;43115:15;43108:36;42923:228;:::o;43157:182::-;43297:34;43293:1;43285:6;43281:14;43274:58;43157:182;:::o;43345:231::-;43485:34;43481:1;43473:6;43469:14;43462:58;43554:14;43549:2;43541:6;43537:15;43530:39;43345:231;:::o;43582:155::-;43722:7;43718:1;43710:6;43706:14;43699:31;43582:155;:::o;43743:182::-;43883:34;43879:1;43871:6;43867:14;43860:58;43743:182;:::o;43931:228::-;44071:34;44067:1;44059:6;44055:14;44048:58;44140:11;44135:2;44127:6;44123:15;44116:36;43931:228;:::o;44165:234::-;44305:34;44301:1;44293:6;44289:14;44282:58;44374:17;44369:2;44361:6;44357:15;44350:42;44165:234;:::o;44405:169::-;44545:21;44541:1;44533:6;44529:14;44522:45;44405:169;:::o;44580:220::-;44720:34;44716:1;44708:6;44704:14;44697:58;44789:3;44784:2;44776:6;44772:15;44765:28;44580:220;:::o;44806:236::-;44946:34;44942:1;44934:6;44930:14;44923:58;45015:19;45010:2;45002:6;44998:15;44991:44;44806:236;:::o;45048:222::-;45188:34;45184:1;45176:6;45172:14;45165:58;45257:5;45252:2;45244:6;45240:15;45233:30;45048:222;:::o;45276:231::-;45416:34;45412:1;45404:6;45400:14;45393:58;45485:14;45480:2;45472:6;45468:15;45461:39;45276:231;:::o;45513:122::-;45586:24;45604:5;45586:24;:::i;:::-;45579:5;45576:35;45566:63;;45625:1;45622;45615:12;45566:63;45513:122;:::o;45641:116::-;45711:21;45726:5;45711:21;:::i;:::-;45704:5;45701:32;45691:60;;45747:1;45744;45737:12;45691:60;45641:116;:::o;45763:120::-;45835:23;45852:5;45835:23;:::i;:::-;45828:5;45825:34;45815:62;;45873:1;45870;45863:12;45815:62;45763:120;:::o;45889:122::-;45962:24;45980:5;45962:24;:::i;:::-;45955:5;45952:35;45942:63;;46001:1;45998;45991:12;45942:63;45889:122;:::o
Swarm Source
ipfs://5b92b5fcddd69b8e7a53f4416db63d8db9d334978ea54f5dea22f4433095ee72
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.