Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 37 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 18807207 | 364 days ago | IN | 0 ETH | 0.00110445 | ||||
Withdraw | 15932442 | 767 days ago | IN | 0 ETH | 0.00078275 | ||||
Pause | 15927260 | 768 days ago | IN | 0 ETH | 0.0056209 | ||||
Pause | 15872675 | 775 days ago | IN | 0 ETH | 0.00026089 | ||||
Set Approval For... | 15845715 | 779 days ago | IN | 0 ETH | 0.0004794 | ||||
Pause | 15839483 | 780 days ago | IN | 0 ETH | 0.00081564 | ||||
Mint | 15835787 | 781 days ago | IN | 0.3333 ETH | 0.0018532 | ||||
Mint | 15835353 | 781 days ago | IN | 0.3333 ETH | 0.00242771 | ||||
Pause | 15834700 | 781 days ago | IN | 0 ETH | 0.00039083 | ||||
Pause | 15798148 | 786 days ago | IN | 0 ETH | 0.00295123 | ||||
Mint | 15798056 | 786 days ago | IN | 0.3333 ETH | 0.01678334 | ||||
Mint | 15797918 | 786 days ago | IN | 0.3333 ETH | 0.0062973 | ||||
Mint | 15797909 | 786 days ago | IN | 0.3333 ETH | 0.00723056 | ||||
Mint | 15797907 | 786 days ago | IN | 0.3333 ETH | 0.00622974 | ||||
Mint | 15797907 | 786 days ago | IN | 0.3333 ETH | 0.00622974 | ||||
Mint | 15797885 | 786 days ago | IN | 0.3333 ETH | 0.00626246 | ||||
Mint | 15797869 | 786 days ago | IN | 0.3333 ETH | 0.00676929 | ||||
Pause | 15796379 | 786 days ago | IN | 0 ETH | 0.00054747 | ||||
Set Royalty Info | 15604196 | 813 days ago | IN | 0 ETH | 0.00022574 | ||||
Withdraw | 15490412 | 830 days ago | IN | 0 ETH | 0.00060777 | ||||
Pause | 15359376 | 851 days ago | IN | 0 ETH | 0.00069947 | ||||
Mint | 15321497 | 857 days ago | IN | 0 ETH | 0.00368958 | ||||
Mint | 15309101 | 859 days ago | IN | 0.3333 ETH | 0.00418611 | ||||
Transfer From | 15308608 | 859 days ago | IN | 0 ETH | 0.00279047 | ||||
Mint | 15302045 | 860 days ago | IN | 0.3333 ETH | 0.00362605 |
Loading...
Loading
Contract Name:
EternalRoyalty
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-03 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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 Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/interfaces/IERC2981.sol // OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol) pragma solidity ^0.8.0; /** * @dev Interface for the NFT Royalty Standard. * * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal * support for royalty payments across all NFT marketplaces and ecosystem participants. * * _Available since v4.5._ */ interface IERC2981 is IERC165 { /** * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of * exchange. The royalty amount is denominated and should be paid in that same unit of exchange. */ function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/common/ERC2981.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/common/ERC2981.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information. * * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first. * * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the * fee is specified in basis points by default. * * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported. * * _Available since v4.5._ */ abstract contract ERC2981 is IERC2981, ERC165 { struct RoyaltyInfo { address receiver; uint96 royaltyFraction; } RoyaltyInfo private _defaultRoyaltyInfo; mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) { return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId); } /** * @inheritdoc IERC2981 */ function royaltyInfo(uint256 _tokenId, uint256 _salePrice) public view virtual override returns (address, uint256) { RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId]; if (royalty.receiver == address(0)) { royalty = _defaultRoyaltyInfo; } uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator(); return (royalty.receiver, royaltyAmount); } /** * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an * override. */ function _feeDenominator() internal pure virtual returns (uint96) { return 10000; } /** * @dev Sets the royalty information that all ids in this contract will default to. * * Requirements: * * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual { require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice"); require(receiver != address(0), "ERC2981: invalid receiver"); _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Removes default royalty information. */ function _deleteDefaultRoyalty() internal virtual { delete _defaultRoyaltyInfo; } /** * @dev Sets the royalty information for a specific token id, overriding the global default. * * Requirements: * * - `receiver` cannot be the zero address. * - `feeNumerator` cannot be greater than the fee denominator. */ function _setTokenRoyalty( uint256 tokenId, address receiver, uint96 feeNumerator ) internal virtual { require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice"); require(receiver != address(0), "ERC2981: Invalid parameters"); _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator); } /** * @dev Resets royalty information for the token id back to the global default. */ function _resetTokenRoyalty(uint256 tokenId) internal virtual { delete _tokenRoyaltyInfo[tokenId]; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * 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; /** * @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 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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); 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: invalid token ID"); 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) { _requireMinted(tokenId); 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 overridden 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 token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_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: caller is not token 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: caller is not token 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) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @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 { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: EternalRoyalty.sol pragma solidity ^0.8.1; contract EternalRoyalty is ERC721, ERC721Enumerable, Ownable, ERC2981 { using Strings for uint256; string public baseURI; string public contractURI; string public baseExtension = ".json"; uint256 public cost = 0.3333 ether; uint256 public maxSupply = 3333; uint256 public maxMintAmount = 3; bool public paused = true; bool public whitelistMint = true; address payable [] public recipients; address public artist = 0x4618bCFA4999bb99552F0e68ae1b45223B922Aa2; constructor(uint96 _royaltyFeesInBips) ERC721("Eternal Royalty NFT Collection", "ERC") { setRoyaltyInfo(owner(), _royaltyFeesInBips); } // internal function _baseURI() internal view virtual override returns (string memory) { return "https://storageapi.fleek.co/abd9068c-35a8-420c-bd64-dcdb2b16f638-bucket/Eternal-Royalty/"; } // public function setContractURI(string calldata _contractURI) public onlyOwner { contractURI = _contractURI; } function setRoyaltyInfo(address _receiver, uint96 _royaltyFeesInBips) public onlyOwner { _setDefaultRoyalty(_receiver, _royaltyFeesInBips); } function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(balanceOf(msg.sender) + _mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if(whitelistMint){ require(verifyUser(msg.sender)); if (msg.sender != owner()) { require(msg.value == cost * _mintAmount, "Need to send 0.3333 ether!"); }else{ require(verifyUser(msg.sender), "Wallet is not Whitelisted!"); } } if (msg.sender != owner()) { require(msg.value == cost * _mintAmount, "Need to send 0.3333 ether!"); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable, ERC2981) returns (bool) { return super.supportsInterface(interfaceId); } // only owner function DistributeRoyalties(address payable [] calldata _addrs) public onlyOwner() { delete recipients; for(uint i=0; i<_addrs.length; i++){ recipients.push(_addrs[i]); } uint256 ownershare = (address(this).balance * 60) / 100; uint256 artistshare = (address(this).balance * 20) / 100; uint256 share = ((address(this).balance * 20) / 100) / recipients.length; IERC20 token = IERC20(0xc778417E063141139Fce010982780140Aa0cD5Ab); uint256 erc20ownershare = (token.balanceOf(address(this)) * 60) / 100; uint256 erc20artistshare = (token.balanceOf(address(this)) * 20) / 100; uint256 erc20share = ((token.balanceOf(address(this)) * 20) / 100) / recipients.length; require(msg.sender == owner()); require(recipients.length > 0); require(erc20share> 0); for(uint i=0; i < recipients.length; i++){ recipients[i].transfer(share); require(token.transferFrom(address(this), recipients[i] , erc20share)); } payable(msg.sender).transfer(ownershare); require(token.transferFrom(address(this), msg.sender, erc20ownershare)); payable(artist).transfer(artistshare); require(token.transferFrom(address(this), artist , erc20artistshare)); } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner() { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner() { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner() { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner() { paused = _state; } function whitePause(bool _state) public onlyOwner() { whitelistMint = _state; } function withdraw() public payable onlyOwner() { require(payable(msg.sender).send(address(this).balance)); } mapping(address => bool) whitelistedAddresses; modifier isWhitelisted(address _address) { require(whitelistedAddresses[_address], "Whitelist: You need to be whitelisted"); _; } function addUser(address[] calldata _wladdrs ) public onlyOwner { for(uint i=0; i < _wladdrs.length; i++){ whitelistedAddresses[_wladdrs[i]] = true; } } function verifyUser(address _whitelistedAddress) public view returns(bool) { bool userIsWhitelisted = whitelistedAddresses[_whitelistedAddress]; return userIsWhitelisted; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint96","name":"_royaltyFeesInBips","type":"uint96"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address payable[]","name":"_addrs","type":"address[]"}],"name":"DistributeRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wladdrs","type":"address[]"}],"name":"addUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"artist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"recipients","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint96","name":"_royaltyFeesInBips","type":"uint96"}],"name":"setRoyaltyInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":"_whitelistedAddress","type":"address"}],"name":"verifyUser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"whitePause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600f9080519060200190620000519291906200056c565b506704a01e9587a34000601055610d0560115560036012556001601360006101000a81548160ff0219169083151502179055506001601360016101000a81548160ff021916908315150217905550734618bcfa4999bb99552f0e68ae1b45223b922aa2601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200010157600080fd5b5060405162005e0138038062005e01833981810160405281019062000127919062000633565b6040518060400160405280601e81526020017f457465726e616c20526f79616c7479204e465420436f6c6c656374696f6e00008152506040518060400160405280600381526020017f45524300000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001ab9291906200056c565b508060019080519060200190620001c49291906200056c565b505050620001e7620001db6200020f60201b60201c565b6200021760201b60201c565b62000208620001fb620002dd60201b60201c565b826200030760201b60201c565b5062000883565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620003176200032d60201b60201c565b620003298282620003be60201b60201c565b5050565b6200033d6200020f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000363620002dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003b390620006d4565b60405180910390fd5b565b620003ce6200056260201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156200042f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200042690620006f6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004999062000718565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600b60008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6000612710905090565b8280546200057a9062000763565b90600052602060002090601f0160209004810192826200059e5760008555620005ea565b82601f10620005b957805160ff1916838001178555620005ea565b82800160010185558215620005ea579182015b82811115620005e9578251825591602001919060010190620005cc565b5b509050620005f99190620005fd565b5090565b5b8082111562000618576000816000905550600101620005fe565b5090565b6000815190506200062d8162000869565b92915050565b6000602082840312156200064657600080fd5b600062000656848285016200061c565b91505092915050565b60006200066e6020836200073a565b91506200067b82620007c8565b602082019050919050565b600062000695602a836200073a565b9150620006a282620007f1565b604082019050919050565b6000620006bc6019836200073a565b9150620006c98262000840565b602082019050919050565b60006020820190508181036000830152620006ef816200065f565b9050919050565b60006020820190508181036000830152620007118162000686565b9050919050565b600060208201905081810360008301526200073381620006ad565b9050919050565b600082825260208201905092915050565b60006bffffffffffffffffffffffff82169050919050565b600060028204905060018216806200077c57607f821691505b6020821081141562000793576200079262000799565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b62000874816200074b565b81146200088057600080fd5b50565b61556e80620008936000396000f3fe60806040526004361061025c5760003560e01c80636352211e11610144578063b88d4fde116100b6578063d1bc76a11161007a578063d1bc76a1146108ef578063d5abeb011461092c578063da3ef23f14610957578063e8a3d48514610980578063e985e9c5146109ab578063f2fde38b146109e85761025c565b8063b88d4fde1461080c578063c4815fdd14610835578063c66828621461085e578063c87b56dd14610889578063cdfca7f2146108c65761025c565b8063804f43cd11610108578063804f43cd1461071057806388a66af51461073b5780638da5cb5b14610764578063938e3d7b1461078f57806395d89b41146107b8578063a22cb465146107e35761025c565b80636352211e1461062b5780636c0360eb1461066857806370a0823114610693578063715018a6146106d05780637f00c7a6146106e75761025c565b80632a55205a116101dd578063438b6300116101a1578063438b6300146104f557806343bc1612146105325780634d8131201461055d5780634f6ccce71461059a57806355f804b3146105d75780635c975abb146106005761025c565b80632a55205a1461042b5780632f745c59146104695780633ccfd60b146104a657806340c10f19146104b057806342842e0e146104cc5761025c565b8063095ea7b311610224578063095ea7b31461035857806313faede61461038157806318160ddd146103ac578063239c70ae146103d757806323b872dd146104025761025c565b806301ffc9a71461026157806302329a291461029e57806302fa7c47146102c757806306fdde03146102f0578063081812fc1461031b575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190614015565b610a11565b6040516102959190614795565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c09190613fc3565b610a23565b005b3480156102d357600080fd5b506102ee60048036038101906102e99190613efd565b610a48565b005b3480156102fc57600080fd5b50610305610a5e565b60405161031291906147b0565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906140ed565b610af0565b60405161034f919061465a565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190613ec1565b610b36565b005b34801561038d57600080fd5b50610396610c4e565b6040516103a39190614a52565b60405180910390f35b3480156103b857600080fd5b506103c1610c54565b6040516103ce9190614a52565b60405180910390f35b3480156103e357600080fd5b506103ec610c61565b6040516103f99190614a52565b60405180910390f35b34801561040e57600080fd5b5061042960048036038101906104249190613dbb565b610c67565b005b34801561043757600080fd5b50610452600480360381019061044d919061413f565b610cc7565b60405161046092919061474a565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613ec1565b610eb2565b60405161049d9190614a52565b60405180910390f35b6104ae610f57565b005b6104ca60048036038101906104c59190613ec1565b610f9f565b005b3480156104d857600080fd5b506104f360048036038101906104ee9190613dbb565b6111d3565b005b34801561050157600080fd5b5061051c60048036038101906105179190613d2d565b6111f3565b6040516105299190614773565b60405180910390f35b34801561053e57600080fd5b506105476112ed565b604051610554919061465a565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190613d2d565b611313565b6040516105919190614795565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc91906140ed565b61136e565b6040516105ce9190614a52565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f991906140ac565b611405565b005b34801561060c57600080fd5b50610615611427565b6040516106229190614795565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d91906140ed565b61143a565b60405161065f919061465a565b60405180910390f35b34801561067457600080fd5b5061067d6114ec565b60405161068a91906147b0565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190613d2d565b61157a565b6040516106c79190614a52565b60405180910390f35b3480156106dc57600080fd5b506106e5611632565b005b3480156106f357600080fd5b5061070e600480360381019061070991906140ed565b611646565b005b34801561071c57600080fd5b50610725611658565b6040516107329190614795565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190613f7e565b61166b565b005b34801561077057600080fd5b50610779611e08565b604051610786919061465a565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190614067565b611e32565b005b3480156107c457600080fd5b506107cd611e50565b6040516107da91906147b0565b60405180910390f35b3480156107ef57600080fd5b5061080a60048036038101906108059190613e85565b611ee2565b005b34801561081857600080fd5b50610833600480360381019061082e9190613e0a565b611ef8565b005b34801561084157600080fd5b5061085c60048036038101906108579190613fc3565b611f5a565b005b34801561086a57600080fd5b50610873611f7f565b60405161088091906147b0565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab91906140ed565b61200d565b6040516108bd91906147b0565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e89190613f39565b6120b7565b005b3480156108fb57600080fd5b50610916600480360381019061091191906140ed565b61218a565b6040516109239190614675565b60405180910390f35b34801561093857600080fd5b506109416121c9565b60405161094e9190614a52565b60405180910390f35b34801561096357600080fd5b5061097e600480360381019061097991906140ac565b6121cf565b005b34801561098c57600080fd5b506109956121f1565b6040516109a291906147b0565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd9190613d7f565b61227f565b6040516109df9190614795565b60405180910390f35b3480156109f457600080fd5b50610a0f6004803603810190610a0a9190613d2d565b612313565b005b6000610a1c82612397565b9050919050565b610a2b612411565b80601360006101000a81548160ff02191690831515021790555050565b610a50612411565b610a5a828261248f565b5050565b606060008054610a6d90614db0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9990614db0565b8015610ae65780601f10610abb57610100808354040283529160200191610ae6565b820191906000526020600020905b815481529060010190602001808311610ac957829003601f168201915b5050505050905090565b6000610afb82612625565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b418261143a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba990614972565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bd1612670565b73ffffffffffffffffffffffffffffffffffffffff161480610c005750610bff81610bfa612670565b61227f565b5b610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c36906148d2565b60405180910390fd5b610c498383612678565b505050565b60105481565b6000600880549050905090565b60125481565b610c78610c72612670565b82612731565b610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae90614a12565b60405180910390fd5b610cc28383836127c6565b505050565b6000806000600c60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161415610e5d57600b6040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610e67612a2d565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610e939190614c0c565b610e9d9190614bdb565b90508160000151819350935050509250929050565b6000610ebd8361157a565b8210610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef5906147d2565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f5f612411565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610f9d57600080fd5b565b6000610fa9610c54565b9050601360009054906101000a900460ff1615610fc557600080fd5b60008211610fd257600080fd5b60125482610fdf3361157a565b610fe99190614b85565b1115610ff457600080fd5b60115482826110039190614b85565b111561100e57600080fd5b601360019054906101000a900460ff161561110d5761102c33611313565b61103557600080fd5b61103d611e08565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110c3578160105461107d9190614c0c565b34146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b5906149f2565b60405180910390fd5b61110c565b6110cc33611313565b61110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290614992565b60405180910390fd5b5b5b611115611e08565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461119757816010546111559190614c0c565b3414611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d906149f2565b60405180910390fd5b5b6000600190505b8281116111cd576111ba8482846111b59190614b85565b612a37565b80806111c590614e13565b91505061119e565b50505050565b6111ee83838360405180602001604052806000815250611ef8565b505050565b606060006112008361157a565b905060008167ffffffffffffffff811115611244577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156112725781602001602082028036833780820191505090505b50905060005b828110156112e25761128a8582610eb2565b8282815181106112c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806112da90614e13565b915050611278565b508092505050919050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080915050919050565b6000611378610c54565b82106113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b0906149b2565b60405180910390fd5b600882815481106113f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b61140d612411565b80600d9080519060200190611423929190613978565b5050565b601360009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114da90614952565b60405180910390fd5b80915050919050565b600d80546114f990614db0565b80601f016020809104026020016040519081016040528092919081815260200182805461152590614db0565b80156115725780601f1061154757610100808354040283529160200191611572565b820191906000526020600020905b81548152906001019060200180831161155557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e2906148b2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61163a612411565b6116446000612a55565b565b61164e612411565b8060128190555050565b601360019054906101000a900460ff1681565b611673612411565b6014600061168191906139fe565b60005b828290508110156117525760148383838181106116ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116df9190613d56565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808061174a90614e13565b915050611684565b5060006064603c476117649190614c0c565b61176e9190614bdb565b9050600060646014476117819190614c0c565b61178b9190614bdb565b9050600060148054905060646014476117a49190614c0c565b6117ae9190614bdb565b6117b89190614bdb565b9050600073c778417e063141139fce010982780140aa0cd5ab905060006064603c8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611812919061465a565b60206040518083038186803b15801561182a57600080fd5b505afa15801561183e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118629190614116565b61186c9190614c0c565b6118769190614bdb565b90506000606460148473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118b7919061465a565b60206040518083038186803b1580156118cf57600080fd5b505afa1580156118e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119079190614116565b6119119190614c0c565b61191b9190614bdb565b90506000601480549050606460148673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611962919061465a565b60206040518083038186803b15801561197a57600080fd5b505afa15801561198e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b29190614116565b6119bc9190614c0c565b6119c69190614bdb565b6119d09190614bdb565b90506119da611e08565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a1157600080fd5b600060148054905011611a2357600080fd5b60008111611a3057600080fd5b60005b601480549050811015611bfa5760148181548110611a7a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f19350505050158015611aea573d6000803e3d6000fd5b508473ffffffffffffffffffffffffffffffffffffffff166323b872dd3060148481548110611b42577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b8152600401611b8c93929190614690565b602060405180830381600087803b158015611ba657600080fd5b505af1158015611bba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bde9190613fec565b611be757600080fd5b8080611bf290614e13565b915050611a33565b503373ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f19350505050158015611c41573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff166323b872dd3033866040518463ffffffff1660e01b8152600401611c7f939291906146c7565b602060405180830381600087803b158015611c9957600080fd5b505af1158015611cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd19190613fec565b611cda57600080fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f19350505050158015611d42573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff166323b872dd30601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b8152600401611da2939291906146c7565b602060405180830381600087803b158015611dbc57600080fd5b505af1158015611dd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df49190613fec565b611dfd57600080fd5b505050505050505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e3a612411565b8181600e9190611e4b929190613a1f565b505050565b606060018054611e5f90614db0565b80601f0160208091040260200160405190810160405280929190818152602001828054611e8b90614db0565b8015611ed85780601f10611ead57610100808354040283529160200191611ed8565b820191906000526020600020905b815481529060010190602001808311611ebb57829003601f168201915b5050505050905090565b611ef4611eed612670565b8383612b1b565b5050565b611f09611f03612670565b83612731565b611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f90614a12565b60405180910390fd5b611f5484848484612c88565b50505050565b611f62612411565b80601360016101000a81548160ff02191690831515021790555050565b600f8054611f8c90614db0565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb890614db0565b80156120055780601f10611fda57610100808354040283529160200191612005565b820191906000526020600020905b815481529060010190602001808311611fe857829003601f168201915b505050505081565b606061201882612ce4565b612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90614932565b60405180910390fd5b6000612061612d50565b9050600081511161208157604051806020016040528060008152506120af565b8061208b84612d70565b600f60405160200161209f93929190614629565b6040516020818303038152906040525b915050919050565b6120bf612411565b60005b828290508110156121855760016016600085858581811061210c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906121219190613d2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061217d90614e13565b9150506120c2565b505050565b6014818154811061219a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6121d7612411565b80600f90805190602001906121ed929190613978565b5050565b600e80546121fe90614db0565b80601f016020809104026020016040519081016040528092919081815260200182805461222a90614db0565b80156122775780601f1061224c57610100808354040283529160200191612277565b820191906000526020600020905b81548152906001019060200180831161225a57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61231b612411565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561238b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238290614812565b60405180910390fd5b61239481612a55565b50565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061240a575061240982612f1d565b5b9050919050565b612419612670565b73ffffffffffffffffffffffffffffffffffffffff16612437611e08565b73ffffffffffffffffffffffffffffffffffffffff161461248d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248490614912565b60405180910390fd5b565b612497612a2d565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec906149d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255c90614a32565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600b60008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b61262e81612ce4565b61266d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266490614952565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126eb8361143a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061273d8361143a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061277f575061277e818561227f565b5b806127bd57508373ffffffffffffffffffffffffffffffffffffffff166127a584610af0565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127e68261143a565b73ffffffffffffffffffffffffffffffffffffffff161461283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283390614832565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a390614872565b60405180910390fd5b6128b7838383612f97565b6128c2600082612678565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129129190614c66565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129699190614b85565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a28838383612fa7565b505050565b6000612710905090565b612a51828260405180602001604052806000815250612fac565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8190614892565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c7b9190614795565b60405180910390a3505050565b612c938484846127c6565b612c9f84848484613007565b612cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd5906147f2565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60606040518060800160405280605881526020016154e160589139905090565b60606000821415612db8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f18565b600082905060005b60008214612dea578080612dd390614e13565b915050600a82612de39190614bdb565b9150612dc0565b60008167ffffffffffffffff811115612e2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612e5e5781602001600182028036833780820191505090505b5090505b60008514612f1157600182612e779190614c66565b9150600a85612e869190614e5c565b6030612e929190614b85565b60f81b818381518110612ece577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f0a9190614bdb565b9450612e62565b8093505050505b919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f905750612f8f8261319e565b5b9050919050565b612fa2838383613280565b505050565b505050565b612fb68383613394565b612fc36000848484613007565b613002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff9906147f2565b60405180910390fd5b505050565b60006130288473ffffffffffffffffffffffffffffffffffffffff1661356e565b15613191578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613051612670565b8786866040518563ffffffff1660e01b815260040161307394939291906146fe565b602060405180830381600087803b15801561308d57600080fd5b505af19250505080156130be57506040513d601f19601f820116820180604052508101906130bb919061403e565b60015b613141573d80600081146130ee576040519150601f19603f3d011682016040523d82523d6000602084013e6130f3565b606091505b50600081511415613139576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613130906147f2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613196565b600190505b949350505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061326957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80613279575061327882613591565b5b9050919050565b61328b8383836135fb565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132ce576132c981613600565b61330d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461330c5761330b8382613649565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133505761334b816137b6565b61338f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461338e5761338d82826138f9565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fb906148f2565b60405180910390fd5b61340d81612ce4565b1561344d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344490614852565b60405180910390fd5b61345960008383612f97565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134a99190614b85565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461356a60008383612fa7565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016136568461157a565b6136609190614c66565b9050600060076000848152602001908152602001600020549050818114613745576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506137ca9190614c66565b9050600060096000848152602001908152602001600020549050600060088381548110613820577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613868577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806138dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006139048361157a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461398490614db0565b90600052602060002090601f0160209004810192826139a657600085556139ed565b82601f106139bf57805160ff19168380011785556139ed565b828001600101855582156139ed579182015b828111156139ec5782518255916020019190600101906139d1565b5b5090506139fa9190613aa5565b5090565b5080546000825590600052602060002090810190613a1c9190613aa5565b50565b828054613a2b90614db0565b90600052602060002090601f016020900481019282613a4d5760008555613a94565b82601f10613a6657803560ff1916838001178555613a94565b82800160010185558215613a94579182015b82811115613a93578235825591602001919060010190613a78565b5b509050613aa19190613aa5565b5090565b5b80821115613abe576000816000905550600101613aa6565b5090565b6000613ad5613ad084614a92565b614a6d565b905082815260208101848484011115613aed57600080fd5b613af8848285614d6e565b509392505050565b6000613b13613b0e84614ac3565b614a6d565b905082815260208101848484011115613b2b57600080fd5b613b36848285614d6e565b509392505050565b600081359050613b4d81615456565b92915050565b600081359050613b628161546d565b92915050565b60008083601f840112613b7a57600080fd5b8235905067ffffffffffffffff811115613b9357600080fd5b602083019150836020820283011115613bab57600080fd5b9250929050565b60008083601f840112613bc457600080fd5b8235905067ffffffffffffffff811115613bdd57600080fd5b602083019150836020820283011115613bf557600080fd5b9250929050565b600081359050613c0b81615484565b92915050565b600081519050613c2081615484565b92915050565b600081359050613c358161549b565b92915050565b600081519050613c4a8161549b565b92915050565b600082601f830112613c6157600080fd5b8135613c71848260208601613ac2565b91505092915050565b60008083601f840112613c8c57600080fd5b8235905067ffffffffffffffff811115613ca557600080fd5b602083019150836001820283011115613cbd57600080fd5b9250929050565b600082601f830112613cd557600080fd5b8135613ce5848260208601613b00565b91505092915050565b600081359050613cfd816154b2565b92915050565b600081519050613d12816154b2565b92915050565b600081359050613d27816154c9565b92915050565b600060208284031215613d3f57600080fd5b6000613d4d84828501613b3e565b91505092915050565b600060208284031215613d6857600080fd5b6000613d7684828501613b53565b91505092915050565b60008060408385031215613d9257600080fd5b6000613da085828601613b3e565b9250506020613db185828601613b3e565b9150509250929050565b600080600060608486031215613dd057600080fd5b6000613dde86828701613b3e565b9350506020613def86828701613b3e565b9250506040613e0086828701613cee565b9150509250925092565b60008060008060808587031215613e2057600080fd5b6000613e2e87828801613b3e565b9450506020613e3f87828801613b3e565b9350506040613e5087828801613cee565b925050606085013567ffffffffffffffff811115613e6d57600080fd5b613e7987828801613c50565b91505092959194509250565b60008060408385031215613e9857600080fd5b6000613ea685828601613b3e565b9250506020613eb785828601613bfc565b9150509250929050565b60008060408385031215613ed457600080fd5b6000613ee285828601613b3e565b9250506020613ef385828601613cee565b9150509250929050565b60008060408385031215613f1057600080fd5b6000613f1e85828601613b3e565b9250506020613f2f85828601613d18565b9150509250929050565b60008060208385031215613f4c57600080fd5b600083013567ffffffffffffffff811115613f6657600080fd5b613f7285828601613b68565b92509250509250929050565b60008060208385031215613f9157600080fd5b600083013567ffffffffffffffff811115613fab57600080fd5b613fb785828601613bb2565b92509250509250929050565b600060208284031215613fd557600080fd5b6000613fe384828501613bfc565b91505092915050565b600060208284031215613ffe57600080fd5b600061400c84828501613c11565b91505092915050565b60006020828403121561402757600080fd5b600061403584828501613c26565b91505092915050565b60006020828403121561405057600080fd5b600061405e84828501613c3b565b91505092915050565b6000806020838503121561407a57600080fd5b600083013567ffffffffffffffff81111561409457600080fd5b6140a085828601613c7a565b92509250509250929050565b6000602082840312156140be57600080fd5b600082013567ffffffffffffffff8111156140d857600080fd5b6140e484828501613cc4565b91505092915050565b6000602082840312156140ff57600080fd5b600061410d84828501613cee565b91505092915050565b60006020828403121561412857600080fd5b600061413684828501613d03565b91505092915050565b6000806040838503121561415257600080fd5b600061416085828601613cee565b925050602061417185828601613cee565b9150509250929050565b6000614187838361460b565b60208301905092915050565b61419c81614d38565b82525050565b6141ab81614cac565b82525050565b6141ba81614c9a565b82525050565b60006141cb82614b19565b6141d58185614b47565b93506141e083614af4565b8060005b838110156142115781516141f8888261417b565b975061420383614b3a565b9250506001810190506141e4565b5085935050505092915050565b61422781614cbe565b82525050565b600061423882614b24565b6142428185614b58565b9350614252818560208601614d7d565b61425b81614f49565b840191505092915050565b600061427182614b2f565b61427b8185614b69565b935061428b818560208601614d7d565b61429481614f49565b840191505092915050565b60006142aa82614b2f565b6142b48185614b7a565b93506142c4818560208601614d7d565b80840191505092915050565b600081546142dd81614db0565b6142e78186614b7a565b94506001821660008114614302576001811461431357614346565b60ff19831686528186019350614346565b61431c85614b04565b60005b8381101561433e5781548189015260018201915060208101905061431f565b838801955050505b50505092915050565b600061435c602b83614b69565b915061436782614f5a565b604082019050919050565b600061437f603283614b69565b915061438a82614fa9565b604082019050919050565b60006143a2602683614b69565b91506143ad82614ff8565b604082019050919050565b60006143c5602583614b69565b91506143d082615047565b604082019050919050565b60006143e8601c83614b69565b91506143f382615096565b602082019050919050565b600061440b602483614b69565b9150614416826150bf565b604082019050919050565b600061442e601983614b69565b91506144398261510e565b602082019050919050565b6000614451602983614b69565b915061445c82615137565b604082019050919050565b6000614474603e83614b69565b915061447f82615186565b604082019050919050565b6000614497602083614b69565b91506144a2826151d5565b602082019050919050565b60006144ba602083614b69565b91506144c5826151fe565b602082019050919050565b60006144dd602f83614b69565b91506144e882615227565b604082019050919050565b6000614500601883614b69565b915061450b82615276565b602082019050919050565b6000614523602183614b69565b915061452e8261529f565b604082019050919050565b6000614546601a83614b69565b9150614551826152ee565b602082019050919050565b6000614569602c83614b69565b915061457482615317565b604082019050919050565b600061458c602a83614b69565b915061459782615366565b604082019050919050565b60006145af601a83614b69565b91506145ba826153b5565b602082019050919050565b60006145d2602e83614b69565b91506145dd826153de565b604082019050919050565b60006145f5601983614b69565b91506146008261542d565b602082019050919050565b61461481614d16565b82525050565b61462381614d16565b82525050565b6000614635828661429f565b9150614641828561429f565b915061464d82846142d0565b9150819050949350505050565b600060208201905061466f60008301846141b1565b92915050565b600060208201905061468a60008301846141a2565b92915050565b60006060820190506146a560008301866141b1565b6146b26020830185614193565b6146bf604083018461461a565b949350505050565b60006060820190506146dc60008301866141b1565b6146e960208301856141b1565b6146f6604083018461461a565b949350505050565b600060808201905061471360008301876141b1565b61472060208301866141b1565b61472d604083018561461a565b818103606083015261473f818461422d565b905095945050505050565b600060408201905061475f60008301856141b1565b61476c602083018461461a565b9392505050565b6000602082019050818103600083015261478d81846141c0565b905092915050565b60006020820190506147aa600083018461421e565b92915050565b600060208201905081810360008301526147ca8184614266565b905092915050565b600060208201905081810360008301526147eb8161434f565b9050919050565b6000602082019050818103600083015261480b81614372565b9050919050565b6000602082019050818103600083015261482b81614395565b9050919050565b6000602082019050818103600083015261484b816143b8565b9050919050565b6000602082019050818103600083015261486b816143db565b9050919050565b6000602082019050818103600083015261488b816143fe565b9050919050565b600060208201905081810360008301526148ab81614421565b9050919050565b600060208201905081810360008301526148cb81614444565b9050919050565b600060208201905081810360008301526148eb81614467565b9050919050565b6000602082019050818103600083015261490b8161448a565b9050919050565b6000602082019050818103600083015261492b816144ad565b9050919050565b6000602082019050818103600083015261494b816144d0565b9050919050565b6000602082019050818103600083015261496b816144f3565b9050919050565b6000602082019050818103600083015261498b81614516565b9050919050565b600060208201905081810360008301526149ab81614539565b9050919050565b600060208201905081810360008301526149cb8161455c565b9050919050565b600060208201905081810360008301526149eb8161457f565b9050919050565b60006020820190508181036000830152614a0b816145a2565b9050919050565b60006020820190508181036000830152614a2b816145c5565b9050919050565b60006020820190508181036000830152614a4b816145e8565b9050919050565b6000602082019050614a67600083018461461a565b92915050565b6000614a77614a88565b9050614a838282614de2565b919050565b6000604051905090565b600067ffffffffffffffff821115614aad57614aac614f1a565b5b614ab682614f49565b9050602081019050919050565b600067ffffffffffffffff821115614ade57614add614f1a565b5b614ae782614f49565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b9082614d16565b9150614b9b83614d16565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bd057614bcf614e8d565b5b828201905092915050565b6000614be682614d16565b9150614bf183614d16565b925082614c0157614c00614ebc565b5b828204905092915050565b6000614c1782614d16565b9150614c2283614d16565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c5b57614c5a614e8d565b5b828202905092915050565b6000614c7182614d16565b9150614c7c83614d16565b925082821015614c8f57614c8e614e8d565b5b828203905092915050565b6000614ca582614cf6565b9050919050565b6000614cb782614cf6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b6000614d4382614d4a565b9050919050565b6000614d5582614d5c565b9050919050565b6000614d6782614cf6565b9050919050565b82818337600083830152505050565b60005b83811015614d9b578082015181840152602081019050614d80565b83811115614daa576000848401525b50505050565b60006002820490506001821680614dc857607f821691505b60208210811415614ddc57614ddb614eeb565b5b50919050565b614deb82614f49565b810181811067ffffffffffffffff82111715614e0a57614e09614f1a565b5b80604052505050565b6000614e1e82614d16565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e5157614e50614e8d565b5b600182019050919050565b6000614e6782614d16565b9150614e7283614d16565b925082614e8257614e81614ebc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f57616c6c6574206973206e6f742057686974656c697374656421000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f4e65656420746f2073656e6420302e3333333320657468657221000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b61545f81614c9a565b811461546a57600080fd5b50565b61547681614cac565b811461548157600080fd5b50565b61548d81614cbe565b811461549857600080fd5b50565b6154a481614cca565b81146154af57600080fd5b50565b6154bb81614d16565b81146154c657600080fd5b50565b6154d281614d20565b81146154dd57600080fd5b5056fe68747470733a2f2f73746f726167656170692e666c65656b2e636f2f61626439303638632d333561382d343230632d626436342d6463646232623136663633382d6275636b65742f457465726e616c2d526f79616c74792fa2646970667358221220f7e4d8060b56a80242605d17326ef1eb308fa24c674455a373b4d29d85cce6bb64736f6c6343000801003300000000000000000000000000000000000000000000000000000000000001f4
Deployed Bytecode
0x60806040526004361061025c5760003560e01c80636352211e11610144578063b88d4fde116100b6578063d1bc76a11161007a578063d1bc76a1146108ef578063d5abeb011461092c578063da3ef23f14610957578063e8a3d48514610980578063e985e9c5146109ab578063f2fde38b146109e85761025c565b8063b88d4fde1461080c578063c4815fdd14610835578063c66828621461085e578063c87b56dd14610889578063cdfca7f2146108c65761025c565b8063804f43cd11610108578063804f43cd1461071057806388a66af51461073b5780638da5cb5b14610764578063938e3d7b1461078f57806395d89b41146107b8578063a22cb465146107e35761025c565b80636352211e1461062b5780636c0360eb1461066857806370a0823114610693578063715018a6146106d05780637f00c7a6146106e75761025c565b80632a55205a116101dd578063438b6300116101a1578063438b6300146104f557806343bc1612146105325780634d8131201461055d5780634f6ccce71461059a57806355f804b3146105d75780635c975abb146106005761025c565b80632a55205a1461042b5780632f745c59146104695780633ccfd60b146104a657806340c10f19146104b057806342842e0e146104cc5761025c565b8063095ea7b311610224578063095ea7b31461035857806313faede61461038157806318160ddd146103ac578063239c70ae146103d757806323b872dd146104025761025c565b806301ffc9a71461026157806302329a291461029e57806302fa7c47146102c757806306fdde03146102f0578063081812fc1461031b575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190614015565b610a11565b6040516102959190614795565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c09190613fc3565b610a23565b005b3480156102d357600080fd5b506102ee60048036038101906102e99190613efd565b610a48565b005b3480156102fc57600080fd5b50610305610a5e565b60405161031291906147b0565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d91906140ed565b610af0565b60405161034f919061465a565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190613ec1565b610b36565b005b34801561038d57600080fd5b50610396610c4e565b6040516103a39190614a52565b60405180910390f35b3480156103b857600080fd5b506103c1610c54565b6040516103ce9190614a52565b60405180910390f35b3480156103e357600080fd5b506103ec610c61565b6040516103f99190614a52565b60405180910390f35b34801561040e57600080fd5b5061042960048036038101906104249190613dbb565b610c67565b005b34801561043757600080fd5b50610452600480360381019061044d919061413f565b610cc7565b60405161046092919061474a565b60405180910390f35b34801561047557600080fd5b50610490600480360381019061048b9190613ec1565b610eb2565b60405161049d9190614a52565b60405180910390f35b6104ae610f57565b005b6104ca60048036038101906104c59190613ec1565b610f9f565b005b3480156104d857600080fd5b506104f360048036038101906104ee9190613dbb565b6111d3565b005b34801561050157600080fd5b5061051c60048036038101906105179190613d2d565b6111f3565b6040516105299190614773565b60405180910390f35b34801561053e57600080fd5b506105476112ed565b604051610554919061465a565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190613d2d565b611313565b6040516105919190614795565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc91906140ed565b61136e565b6040516105ce9190614a52565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f991906140ac565b611405565b005b34801561060c57600080fd5b50610615611427565b6040516106229190614795565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d91906140ed565b61143a565b60405161065f919061465a565b60405180910390f35b34801561067457600080fd5b5061067d6114ec565b60405161068a91906147b0565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190613d2d565b61157a565b6040516106c79190614a52565b60405180910390f35b3480156106dc57600080fd5b506106e5611632565b005b3480156106f357600080fd5b5061070e600480360381019061070991906140ed565b611646565b005b34801561071c57600080fd5b50610725611658565b6040516107329190614795565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d9190613f7e565b61166b565b005b34801561077057600080fd5b50610779611e08565b604051610786919061465a565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190614067565b611e32565b005b3480156107c457600080fd5b506107cd611e50565b6040516107da91906147b0565b60405180910390f35b3480156107ef57600080fd5b5061080a60048036038101906108059190613e85565b611ee2565b005b34801561081857600080fd5b50610833600480360381019061082e9190613e0a565b611ef8565b005b34801561084157600080fd5b5061085c60048036038101906108579190613fc3565b611f5a565b005b34801561086a57600080fd5b50610873611f7f565b60405161088091906147b0565b60405180910390f35b34801561089557600080fd5b506108b060048036038101906108ab91906140ed565b61200d565b6040516108bd91906147b0565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e89190613f39565b6120b7565b005b3480156108fb57600080fd5b50610916600480360381019061091191906140ed565b61218a565b6040516109239190614675565b60405180910390f35b34801561093857600080fd5b506109416121c9565b60405161094e9190614a52565b60405180910390f35b34801561096357600080fd5b5061097e600480360381019061097991906140ac565b6121cf565b005b34801561098c57600080fd5b506109956121f1565b6040516109a291906147b0565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd9190613d7f565b61227f565b6040516109df9190614795565b60405180910390f35b3480156109f457600080fd5b50610a0f6004803603810190610a0a9190613d2d565b612313565b005b6000610a1c82612397565b9050919050565b610a2b612411565b80601360006101000a81548160ff02191690831515021790555050565b610a50612411565b610a5a828261248f565b5050565b606060008054610a6d90614db0565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9990614db0565b8015610ae65780601f10610abb57610100808354040283529160200191610ae6565b820191906000526020600020905b815481529060010190602001808311610ac957829003601f168201915b5050505050905090565b6000610afb82612625565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b418261143a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba990614972565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bd1612670565b73ffffffffffffffffffffffffffffffffffffffff161480610c005750610bff81610bfa612670565b61227f565b5b610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c36906148d2565b60405180910390fd5b610c498383612678565b505050565b60105481565b6000600880549050905090565b60125481565b610c78610c72612670565b82612731565b610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae90614a12565b60405180910390fd5b610cc28383836127c6565b505050565b6000806000600c60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161415610e5d57600b6040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610e67612a2d565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610e939190614c0c565b610e9d9190614bdb565b90508160000151819350935050509250929050565b6000610ebd8361157a565b8210610efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef5906147d2565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f5f612411565b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610f9d57600080fd5b565b6000610fa9610c54565b9050601360009054906101000a900460ff1615610fc557600080fd5b60008211610fd257600080fd5b60125482610fdf3361157a565b610fe99190614b85565b1115610ff457600080fd5b60115482826110039190614b85565b111561100e57600080fd5b601360019054906101000a900460ff161561110d5761102c33611313565b61103557600080fd5b61103d611e08565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110c3578160105461107d9190614c0c565b34146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b5906149f2565b60405180910390fd5b61110c565b6110cc33611313565b61110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290614992565b60405180910390fd5b5b5b611115611e08565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461119757816010546111559190614c0c565b3414611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d906149f2565b60405180910390fd5b5b6000600190505b8281116111cd576111ba8482846111b59190614b85565b612a37565b80806111c590614e13565b91505061119e565b50505050565b6111ee83838360405180602001604052806000815250611ef8565b505050565b606060006112008361157a565b905060008167ffffffffffffffff811115611244577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156112725781602001602082028036833780820191505090505b50905060005b828110156112e25761128a8582610eb2565b8282815181106112c3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806112da90614e13565b915050611278565b508092505050919050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080915050919050565b6000611378610c54565b82106113b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b0906149b2565b60405180910390fd5b600882815481106113f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b61140d612411565b80600d9080519060200190611423929190613978565b5050565b601360009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114da90614952565b60405180910390fd5b80915050919050565b600d80546114f990614db0565b80601f016020809104026020016040519081016040528092919081815260200182805461152590614db0565b80156115725780601f1061154757610100808354040283529160200191611572565b820191906000526020600020905b81548152906001019060200180831161155557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e2906148b2565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61163a612411565b6116446000612a55565b565b61164e612411565b8060128190555050565b601360019054906101000a900460ff1681565b611673612411565b6014600061168191906139fe565b60005b828290508110156117525760148383838181106116ca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906116df9190613d56565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808061174a90614e13565b915050611684565b5060006064603c476117649190614c0c565b61176e9190614bdb565b9050600060646014476117819190614c0c565b61178b9190614bdb565b9050600060148054905060646014476117a49190614c0c565b6117ae9190614bdb565b6117b89190614bdb565b9050600073c778417e063141139fce010982780140aa0cd5ab905060006064603c8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611812919061465a565b60206040518083038186803b15801561182a57600080fd5b505afa15801561183e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118629190614116565b61186c9190614c0c565b6118769190614bdb565b90506000606460148473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016118b7919061465a565b60206040518083038186803b1580156118cf57600080fd5b505afa1580156118e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119079190614116565b6119119190614c0c565b61191b9190614bdb565b90506000601480549050606460148673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611962919061465a565b60206040518083038186803b15801561197a57600080fd5b505afa15801561198e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b29190614116565b6119bc9190614c0c565b6119c69190614bdb565b6119d09190614bdb565b90506119da611e08565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a1157600080fd5b600060148054905011611a2357600080fd5b60008111611a3057600080fd5b60005b601480549050811015611bfa5760148181548110611a7a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f19350505050158015611aea573d6000803e3d6000fd5b508473ffffffffffffffffffffffffffffffffffffffff166323b872dd3060148481548110611b42577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b8152600401611b8c93929190614690565b602060405180830381600087803b158015611ba657600080fd5b505af1158015611bba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bde9190613fec565b611be757600080fd5b8080611bf290614e13565b915050611a33565b503373ffffffffffffffffffffffffffffffffffffffff166108fc889081150290604051600060405180830381858888f19350505050158015611c41573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff166323b872dd3033866040518463ffffffff1660e01b8152600401611c7f939291906146c7565b602060405180830381600087803b158015611c9957600080fd5b505af1158015611cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd19190613fec565b611cda57600080fd5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f19350505050158015611d42573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff166323b872dd30601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b8152600401611da2939291906146c7565b602060405180830381600087803b158015611dbc57600080fd5b505af1158015611dd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df49190613fec565b611dfd57600080fd5b505050505050505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e3a612411565b8181600e9190611e4b929190613a1f565b505050565b606060018054611e5f90614db0565b80601f0160208091040260200160405190810160405280929190818152602001828054611e8b90614db0565b8015611ed85780601f10611ead57610100808354040283529160200191611ed8565b820191906000526020600020905b815481529060010190602001808311611ebb57829003601f168201915b5050505050905090565b611ef4611eed612670565b8383612b1b565b5050565b611f09611f03612670565b83612731565b611f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3f90614a12565b60405180910390fd5b611f5484848484612c88565b50505050565b611f62612411565b80601360016101000a81548160ff02191690831515021790555050565b600f8054611f8c90614db0565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb890614db0565b80156120055780601f10611fda57610100808354040283529160200191612005565b820191906000526020600020905b815481529060010190602001808311611fe857829003601f168201915b505050505081565b606061201882612ce4565b612057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204e90614932565b60405180910390fd5b6000612061612d50565b9050600081511161208157604051806020016040528060008152506120af565b8061208b84612d70565b600f60405160200161209f93929190614629565b6040516020818303038152906040525b915050919050565b6120bf612411565b60005b828290508110156121855760016016600085858581811061210c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906121219190613d2d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061217d90614e13565b9150506120c2565b505050565b6014818154811061219a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6121d7612411565b80600f90805190602001906121ed929190613978565b5050565b600e80546121fe90614db0565b80601f016020809104026020016040519081016040528092919081815260200182805461222a90614db0565b80156122775780601f1061224c57610100808354040283529160200191612277565b820191906000526020600020905b81548152906001019060200180831161225a57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61231b612411565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561238b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238290614812565b60405180910390fd5b61239481612a55565b50565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061240a575061240982612f1d565b5b9050919050565b612419612670565b73ffffffffffffffffffffffffffffffffffffffff16612437611e08565b73ffffffffffffffffffffffffffffffffffffffff161461248d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248490614912565b60405180910390fd5b565b612497612a2d565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec906149d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255c90614a32565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600b60008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b61262e81612ce4565b61266d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266490614952565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126eb8361143a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061273d8361143a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061277f575061277e818561227f565b5b806127bd57508373ffffffffffffffffffffffffffffffffffffffff166127a584610af0565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166127e68261143a565b73ffffffffffffffffffffffffffffffffffffffff161461283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283390614832565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a390614872565b60405180910390fd5b6128b7838383612f97565b6128c2600082612678565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129129190614c66565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129699190614b85565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a28838383612fa7565b505050565b6000612710905090565b612a51828260405180602001604052806000815250612fac565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8190614892565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c7b9190614795565b60405180910390a3505050565b612c938484846127c6565b612c9f84848484613007565b612cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd5906147f2565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60606040518060800160405280605881526020016154e160589139905090565b60606000821415612db8576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f18565b600082905060005b60008214612dea578080612dd390614e13565b915050600a82612de39190614bdb565b9150612dc0565b60008167ffffffffffffffff811115612e2c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612e5e5781602001600182028036833780820191505090505b5090505b60008514612f1157600182612e779190614c66565b9150600a85612e869190614e5c565b6030612e929190614b85565b60f81b818381518110612ece577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f0a9190614bdb565b9450612e62565b8093505050505b919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f905750612f8f8261319e565b5b9050919050565b612fa2838383613280565b505050565b505050565b612fb68383613394565b612fc36000848484613007565b613002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff9906147f2565b60405180910390fd5b505050565b60006130288473ffffffffffffffffffffffffffffffffffffffff1661356e565b15613191578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613051612670565b8786866040518563ffffffff1660e01b815260040161307394939291906146fe565b602060405180830381600087803b15801561308d57600080fd5b505af19250505080156130be57506040513d601f19601f820116820180604052508101906130bb919061403e565b60015b613141573d80600081146130ee576040519150601f19603f3d011682016040523d82523d6000602084013e6130f3565b606091505b50600081511415613139576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613130906147f2565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613196565b600190505b949350505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061326957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80613279575061327882613591565b5b9050919050565b61328b8383836135fb565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132ce576132c981613600565b61330d565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461330c5761330b8382613649565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133505761334b816137b6565b61338f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461338e5761338d82826138f9565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fb906148f2565b60405180910390fd5b61340d81612ce4565b1561344d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344490614852565b60405180910390fd5b61345960008383612f97565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134a99190614b85565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461356a60008383612fa7565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016136568461157a565b6136609190614c66565b9050600060076000848152602001908152602001600020549050818114613745576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506137ca9190614c66565b9050600060096000848152602001908152602001600020549050600060088381548110613820577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110613868577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806138dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006139048361157a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b82805461398490614db0565b90600052602060002090601f0160209004810192826139a657600085556139ed565b82601f106139bf57805160ff19168380011785556139ed565b828001600101855582156139ed579182015b828111156139ec5782518255916020019190600101906139d1565b5b5090506139fa9190613aa5565b5090565b5080546000825590600052602060002090810190613a1c9190613aa5565b50565b828054613a2b90614db0565b90600052602060002090601f016020900481019282613a4d5760008555613a94565b82601f10613a6657803560ff1916838001178555613a94565b82800160010185558215613a94579182015b82811115613a93578235825591602001919060010190613a78565b5b509050613aa19190613aa5565b5090565b5b80821115613abe576000816000905550600101613aa6565b5090565b6000613ad5613ad084614a92565b614a6d565b905082815260208101848484011115613aed57600080fd5b613af8848285614d6e565b509392505050565b6000613b13613b0e84614ac3565b614a6d565b905082815260208101848484011115613b2b57600080fd5b613b36848285614d6e565b509392505050565b600081359050613b4d81615456565b92915050565b600081359050613b628161546d565b92915050565b60008083601f840112613b7a57600080fd5b8235905067ffffffffffffffff811115613b9357600080fd5b602083019150836020820283011115613bab57600080fd5b9250929050565b60008083601f840112613bc457600080fd5b8235905067ffffffffffffffff811115613bdd57600080fd5b602083019150836020820283011115613bf557600080fd5b9250929050565b600081359050613c0b81615484565b92915050565b600081519050613c2081615484565b92915050565b600081359050613c358161549b565b92915050565b600081519050613c4a8161549b565b92915050565b600082601f830112613c6157600080fd5b8135613c71848260208601613ac2565b91505092915050565b60008083601f840112613c8c57600080fd5b8235905067ffffffffffffffff811115613ca557600080fd5b602083019150836001820283011115613cbd57600080fd5b9250929050565b600082601f830112613cd557600080fd5b8135613ce5848260208601613b00565b91505092915050565b600081359050613cfd816154b2565b92915050565b600081519050613d12816154b2565b92915050565b600081359050613d27816154c9565b92915050565b600060208284031215613d3f57600080fd5b6000613d4d84828501613b3e565b91505092915050565b600060208284031215613d6857600080fd5b6000613d7684828501613b53565b91505092915050565b60008060408385031215613d9257600080fd5b6000613da085828601613b3e565b9250506020613db185828601613b3e565b9150509250929050565b600080600060608486031215613dd057600080fd5b6000613dde86828701613b3e565b9350506020613def86828701613b3e565b9250506040613e0086828701613cee565b9150509250925092565b60008060008060808587031215613e2057600080fd5b6000613e2e87828801613b3e565b9450506020613e3f87828801613b3e565b9350506040613e5087828801613cee565b925050606085013567ffffffffffffffff811115613e6d57600080fd5b613e7987828801613c50565b91505092959194509250565b60008060408385031215613e9857600080fd5b6000613ea685828601613b3e565b9250506020613eb785828601613bfc565b9150509250929050565b60008060408385031215613ed457600080fd5b6000613ee285828601613b3e565b9250506020613ef385828601613cee565b9150509250929050565b60008060408385031215613f1057600080fd5b6000613f1e85828601613b3e565b9250506020613f2f85828601613d18565b9150509250929050565b60008060208385031215613f4c57600080fd5b600083013567ffffffffffffffff811115613f6657600080fd5b613f7285828601613b68565b92509250509250929050565b60008060208385031215613f9157600080fd5b600083013567ffffffffffffffff811115613fab57600080fd5b613fb785828601613bb2565b92509250509250929050565b600060208284031215613fd557600080fd5b6000613fe384828501613bfc565b91505092915050565b600060208284031215613ffe57600080fd5b600061400c84828501613c11565b91505092915050565b60006020828403121561402757600080fd5b600061403584828501613c26565b91505092915050565b60006020828403121561405057600080fd5b600061405e84828501613c3b565b91505092915050565b6000806020838503121561407a57600080fd5b600083013567ffffffffffffffff81111561409457600080fd5b6140a085828601613c7a565b92509250509250929050565b6000602082840312156140be57600080fd5b600082013567ffffffffffffffff8111156140d857600080fd5b6140e484828501613cc4565b91505092915050565b6000602082840312156140ff57600080fd5b600061410d84828501613cee565b91505092915050565b60006020828403121561412857600080fd5b600061413684828501613d03565b91505092915050565b6000806040838503121561415257600080fd5b600061416085828601613cee565b925050602061417185828601613cee565b9150509250929050565b6000614187838361460b565b60208301905092915050565b61419c81614d38565b82525050565b6141ab81614cac565b82525050565b6141ba81614c9a565b82525050565b60006141cb82614b19565b6141d58185614b47565b93506141e083614af4565b8060005b838110156142115781516141f8888261417b565b975061420383614b3a565b9250506001810190506141e4565b5085935050505092915050565b61422781614cbe565b82525050565b600061423882614b24565b6142428185614b58565b9350614252818560208601614d7d565b61425b81614f49565b840191505092915050565b600061427182614b2f565b61427b8185614b69565b935061428b818560208601614d7d565b61429481614f49565b840191505092915050565b60006142aa82614b2f565b6142b48185614b7a565b93506142c4818560208601614d7d565b80840191505092915050565b600081546142dd81614db0565b6142e78186614b7a565b94506001821660008114614302576001811461431357614346565b60ff19831686528186019350614346565b61431c85614b04565b60005b8381101561433e5781548189015260018201915060208101905061431f565b838801955050505b50505092915050565b600061435c602b83614b69565b915061436782614f5a565b604082019050919050565b600061437f603283614b69565b915061438a82614fa9565b604082019050919050565b60006143a2602683614b69565b91506143ad82614ff8565b604082019050919050565b60006143c5602583614b69565b91506143d082615047565b604082019050919050565b60006143e8601c83614b69565b91506143f382615096565b602082019050919050565b600061440b602483614b69565b9150614416826150bf565b604082019050919050565b600061442e601983614b69565b91506144398261510e565b602082019050919050565b6000614451602983614b69565b915061445c82615137565b604082019050919050565b6000614474603e83614b69565b915061447f82615186565b604082019050919050565b6000614497602083614b69565b91506144a2826151d5565b602082019050919050565b60006144ba602083614b69565b91506144c5826151fe565b602082019050919050565b60006144dd602f83614b69565b91506144e882615227565b604082019050919050565b6000614500601883614b69565b915061450b82615276565b602082019050919050565b6000614523602183614b69565b915061452e8261529f565b604082019050919050565b6000614546601a83614b69565b9150614551826152ee565b602082019050919050565b6000614569602c83614b69565b915061457482615317565b604082019050919050565b600061458c602a83614b69565b915061459782615366565b604082019050919050565b60006145af601a83614b69565b91506145ba826153b5565b602082019050919050565b60006145d2602e83614b69565b91506145dd826153de565b604082019050919050565b60006145f5601983614b69565b91506146008261542d565b602082019050919050565b61461481614d16565b82525050565b61462381614d16565b82525050565b6000614635828661429f565b9150614641828561429f565b915061464d82846142d0565b9150819050949350505050565b600060208201905061466f60008301846141b1565b92915050565b600060208201905061468a60008301846141a2565b92915050565b60006060820190506146a560008301866141b1565b6146b26020830185614193565b6146bf604083018461461a565b949350505050565b60006060820190506146dc60008301866141b1565b6146e960208301856141b1565b6146f6604083018461461a565b949350505050565b600060808201905061471360008301876141b1565b61472060208301866141b1565b61472d604083018561461a565b818103606083015261473f818461422d565b905095945050505050565b600060408201905061475f60008301856141b1565b61476c602083018461461a565b9392505050565b6000602082019050818103600083015261478d81846141c0565b905092915050565b60006020820190506147aa600083018461421e565b92915050565b600060208201905081810360008301526147ca8184614266565b905092915050565b600060208201905081810360008301526147eb8161434f565b9050919050565b6000602082019050818103600083015261480b81614372565b9050919050565b6000602082019050818103600083015261482b81614395565b9050919050565b6000602082019050818103600083015261484b816143b8565b9050919050565b6000602082019050818103600083015261486b816143db565b9050919050565b6000602082019050818103600083015261488b816143fe565b9050919050565b600060208201905081810360008301526148ab81614421565b9050919050565b600060208201905081810360008301526148cb81614444565b9050919050565b600060208201905081810360008301526148eb81614467565b9050919050565b6000602082019050818103600083015261490b8161448a565b9050919050565b6000602082019050818103600083015261492b816144ad565b9050919050565b6000602082019050818103600083015261494b816144d0565b9050919050565b6000602082019050818103600083015261496b816144f3565b9050919050565b6000602082019050818103600083015261498b81614516565b9050919050565b600060208201905081810360008301526149ab81614539565b9050919050565b600060208201905081810360008301526149cb8161455c565b9050919050565b600060208201905081810360008301526149eb8161457f565b9050919050565b60006020820190508181036000830152614a0b816145a2565b9050919050565b60006020820190508181036000830152614a2b816145c5565b9050919050565b60006020820190508181036000830152614a4b816145e8565b9050919050565b6000602082019050614a67600083018461461a565b92915050565b6000614a77614a88565b9050614a838282614de2565b919050565b6000604051905090565b600067ffffffffffffffff821115614aad57614aac614f1a565b5b614ab682614f49565b9050602081019050919050565b600067ffffffffffffffff821115614ade57614add614f1a565b5b614ae782614f49565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b9082614d16565b9150614b9b83614d16565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bd057614bcf614e8d565b5b828201905092915050565b6000614be682614d16565b9150614bf183614d16565b925082614c0157614c00614ebc565b5b828204905092915050565b6000614c1782614d16565b9150614c2283614d16565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c5b57614c5a614e8d565b5b828202905092915050565b6000614c7182614d16565b9150614c7c83614d16565b925082821015614c8f57614c8e614e8d565b5b828203905092915050565b6000614ca582614cf6565b9050919050565b6000614cb782614cf6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b6000614d4382614d4a565b9050919050565b6000614d5582614d5c565b9050919050565b6000614d6782614cf6565b9050919050565b82818337600083830152505050565b60005b83811015614d9b578082015181840152602081019050614d80565b83811115614daa576000848401525b50505050565b60006002820490506001821680614dc857607f821691505b60208210811415614ddc57614ddb614eeb565b5b50919050565b614deb82614f49565b810181811067ffffffffffffffff82111715614e0a57614e09614f1a565b5b80604052505050565b6000614e1e82614d16565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e5157614e50614e8d565b5b600182019050919050565b6000614e6782614d16565b9150614e7283614d16565b925082614e8257614e81614ebc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f57616c6c6574206973206e6f742057686974656c697374656421000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f4e65656420746f2073656e6420302e3333333320657468657221000000000000600082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b61545f81614c9a565b811461546a57600080fd5b50565b61547681614cac565b811461548157600080fd5b50565b61548d81614cbe565b811461549857600080fd5b50565b6154a481614cca565b81146154af57600080fd5b50565b6154bb81614d16565b81146154c657600080fd5b50565b6154d281614d20565b81146154dd57600080fd5b5056fe68747470733a2f2f73746f726167656170692e666c65656b2e636f2f61626439303638632d333561382d343230632d626436342d6463646232623136663633382d6275636b65742f457465726e616c2d526f79616c74792fa2646970667358221220f7e4d8060b56a80242605d17326ef1eb308fa24c674455a373b4d29d85cce6bb64736f6c63430008010033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000001f4
-----Decoded View---------------
Arg [0] : _royaltyFeesInBips (uint96): 500
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000001f4
Deployed Bytecode Sourcemap
54168:6601:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57667:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59767:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55218:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33594:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35107:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34624:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54381:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48580:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54460:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35807:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23076:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;48248:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59987:140;;;:::i;:::-;;55391:1020;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36214:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56433:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54613:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60571:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48770:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59475:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54499:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33305:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54277:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33036:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8152:103;;;;;;;;;;;;;:::i;:::-;;59323:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54531:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57929:1374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7504:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55092:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33763:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35350:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36470:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59866:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54337:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56881:560;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60351:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54570:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54422:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59609:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54305:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35576:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8410:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57667:229;57815:4;57848:36;57872:11;57848:23;:36::i;:::-;57841:43;;57667:229;;;:::o;59767:89::-;7390:13;:11;:13::i;:::-;59838:6:::1;59829;;:15;;;;;;;;;;;;;;;;;;59767:89:::0;:::o;55218:163::-;7390:13;:11;:13::i;:::-;55320:49:::1;55339:9;55350:18;55320;:49::i;:::-;55218:163:::0;;:::o;33594:100::-;33648:13;33681:5;33674:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33594:100;:::o;35107:171::-;35183:7;35203:23;35218:7;35203:14;:23::i;:::-;35246:15;:24;35262:7;35246:24;;;;;;;;;;;;;;;;;;;;;35239:31;;35107:171;;;:::o;34624:417::-;34705:13;34721:23;34736:7;34721:14;:23::i;:::-;34705:39;;34769:5;34763:11;;:2;:11;;;;34755:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;34863:5;34847:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;34872:37;34889:5;34896:12;:10;:12::i;:::-;34872:16;:37::i;:::-;34847:62;34825:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;35012:21;35021:2;35025:7;35012:8;:21::i;:::-;34624:417;;;:::o;54381:34::-;;;;:::o;48580:113::-;48641:7;48668:10;:17;;;;48661:24;;48580:113;:::o;54460:32::-;;;;:::o;35807:336::-;36002:41;36021:12;:10;:12::i;:::-;36035:7;36002:18;:41::i;:::-;35994:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;36107:28;36117:4;36123:2;36127:7;36107:9;:28::i;:::-;35807:336;;;:::o;23076:442::-;23173:7;23182;23202:26;23231:17;:27;23249:8;23231:27;;;;;;;;;;;23202:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23303:1;23275:30;;:7;:16;;;:30;;;23271:92;;;23332:19;23322:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23271:92;23375:21;23440:17;:15;:17::i;:::-;23399:58;;23413:7;:23;;;23400:36;;:10;:36;;;;:::i;:::-;23399:58;;;;:::i;:::-;23375:82;;23478:7;:16;;;23496:13;23470:40;;;;;;23076:442;;;;;:::o;48248:256::-;48345:7;48381:23;48398:5;48381:16;:23::i;:::-;48373:5;:31;48365:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;48470:12;:19;48483:5;48470:19;;;;;;;;;;;;;;;:26;48490:5;48470:26;;;;;;;;;;;;48463:33;;48248:256;;;;:::o;59987:140::-;7390:13;:11;:13::i;:::-;60065:10:::1;60057:24;;:47;60082:21;60057:47;;;;;;;;;;;;;;;;;;;;;;;60049:56;;;::::0;::::1;;59987:140::o:0;55391:1020::-;55469:14;55486:13;:11;:13::i;:::-;55469:30;;55523:6;;;;;;;;;;;55522:7;55514:16;;;;;;55567:1;55553:11;:15;55545:24;;;;;;55631:13;;55616:11;55592:21;55602:10;55592:9;:21::i;:::-;:35;;;;:::i;:::-;:52;;55584:61;;;;;;55692:9;;55677:11;55668:6;:20;;;;:::i;:::-;:33;;55660:42;;;;;;55734:13;;;;;;;;;;;55731:353;;;55775:22;55786:10;55775;:22::i;:::-;55767:31;;;;;;55835:7;:5;:7::i;:::-;55821:21;;:10;:21;;;55817:252;;55895:11;55888:4;;:18;;;;:::i;:::-;55875:9;:31;55867:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;55817:252;;;56000:22;56011:10;56000;:22::i;:::-;55992:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;55817:252;55731:353;56158:7;:5;:7::i;:::-;56144:21;;:10;:21;;;56140:128;;56210:11;56203:4;;:18;;;;:::i;:::-;56190:9;:31;56182:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;56140:128;56301:9;56313:1;56301:13;;56296:104;56321:11;56316:1;:16;56296:104;;56358:26;56368:3;56382:1;56373:6;:10;;;;:::i;:::-;56358:9;:26::i;:::-;56334:3;;;;;:::i;:::-;;;;56296:104;;;;55391:1020;;;:::o;36214:185::-;36352:39;36369:4;36375:2;36379:7;36352:39;;;;;;;;;;;;:16;:39::i;:::-;36214:185;;;:::o;56433:422::-;56520:16;56562:23;56588:17;56598:6;56588:9;:17::i;:::-;56562:43;;56620:25;56662:15;56648:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56620:58;;56698:9;56693:121;56713:15;56709:1;:19;56693:121;;;56768:30;56788:6;56796:1;56768:19;:30::i;:::-;56754:8;56763:1;56754:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;56730:3;;;;;:::i;:::-;;;;56693:121;;;;56835:8;56828:15;;;;56433:422;;;:::o;54613:66::-;;;;;;;;;;;;;:::o;60571:191::-;60640:4;60655:22;60680:20;:41;60701:19;60680:41;;;;;;;;;;;;;;;;;;;;;;;;;60655:66;;60737:17;60730:24;;;60571:191;;;:::o;48770:233::-;48845:7;48881:30;:28;:30::i;:::-;48873:5;:38;48865:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;48978:10;48989:5;48978:17;;;;;;;;;;;;;;;;;;;;;;;;48971:24;;48770:233;;;:::o;59475:114::-;7390:13;:11;:13::i;:::-;59566:11:::1;59556:7;:21;;;;;;;;;;;;:::i;:::-;;59475:114:::0;:::o;54499:25::-;;;;;;;;;;;;;:::o;33305:222::-;33377:7;33397:13;33413:7;:16;33421:7;33413:16;;;;;;;;;;;;;;;;;;;;;33397:32;;33465:1;33448:19;;:5;:19;;;;33440:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;33514:5;33507:12;;;33305:222;;;:::o;54277:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33036:207::-;33108:7;33153:1;33136:19;;:5;:19;;;;33128:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33219:9;:16;33229:5;33219:16;;;;;;;;;;;;;;;;33212:23;;33036:207;;;:::o;8152:103::-;7390:13;:11;:13::i;:::-;8217:30:::1;8244:1;8217:18;:30::i;:::-;8152:103::o:0;59323:132::-;7390:13;:11;:13::i;:::-;59426:17:::1;59410:13;:33;;;;59323:132:::0;:::o;54531:32::-;;;;;;;;;;;;;:::o;57929:1374::-;7390:13;:11;:13::i;:::-;58031:10:::1;;58024:17;;;;:::i;:::-;58056:6;58052:92;58068:6;;:13;;58066:1;:15;58052:92;;;58106:10;58122:6;;58129:1;58122:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58106:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58083:3;;;;;:::i;:::-;;;;58052:92;;;;58164:18;58216:3;58210:2;58186:21;:26;;;;:::i;:::-;58185:34;;;;:::i;:::-;58164:55;;58230:19;58283:3;58277:2;58253:21;:26;;;;:::i;:::-;58252:34;;;;:::i;:::-;58230:56;;58297:13;58352:10;:17;;;;58345:3;58339:2;58315:21;:26;;;;:::i;:::-;58314:34;;;;:::i;:::-;58313:56;;;;:::i;:::-;58297:72;;58381:12;58403:42;58381:65;;58457:23;58523:3;58517:2;58484:5;:15;;;58508:4;58484:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;;;;:::i;:::-;58483:43;;;;:::i;:::-;58457:69;;58537:24;58604:3;58598:2;58565:5;:15;;;58589:4;58565:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;;;;:::i;:::-;58564:43;;;;:::i;:::-;58537:70;;58618:18;58687:10;:17;;;;58680:3;58674:2;58641:5;:15;;;58665:4;58641:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;;;;:::i;:::-;58640:43;;;;:::i;:::-;58639:65;;;;:::i;:::-;58618:86;;58740:7;:5;:7::i;:::-;58726:21;;:10;:21;;;58718:30;;;::::0;::::1;;58787:1;58767:10;:17;;;;:21;58759:30;;;::::0;::::1;;58820:1;58808:10;:13;58800:22;;;::::0;::::1;;58837:6;58833:184;58851:10;:17;;;;58847:1;:21;58833:184;;;58889:10;58900:1;58889:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:22;;:29;58912:5;58889:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;58941:5;:18;;;58968:4;58975:10;58986:1;58975:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58991:10;58941:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58933:70;;;::::0;::::1;;58870:3;;;;;:::i;:::-;;;;58833:184;;;;59036:10;59028:28;;:40;59057:10;59028:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;59087:5;:18;;;59114:4;59121:10;59133:15;59087:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59079:71;;;::::0;::::1;;59169:6;;;;;;;;;;;59161:24;;:37;59186:11;59161:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;59217:5;:18;;;59244:4;59251:6;;;;;;;;;;;59260:16;59217:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59209:69;;;::::0;::::1;;7414:1;;;;;;;57929:1374:::0;;:::o;7504:87::-;7550:7;7577:6;;;;;;;;;;;7570:13;;7504:87;:::o;55092:116::-;7390:13;:11;:13::i;:::-;55188:12:::1;;55174:11;:26;;;;;;;:::i;:::-;;55092:116:::0;;:::o;33763:104::-;33819:13;33852:7;33845:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33763:104;:::o;35350:155::-;35445:52;35464:12;:10;:12::i;:::-;35478:8;35488;35445:18;:52::i;:::-;35350:155;;:::o;36470:323::-;36644:41;36663:12;:10;:12::i;:::-;36677:7;36644:18;:41::i;:::-;36636:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;36747:38;36761:4;36767:2;36771:7;36780:4;36747:13;:38::i;:::-;36470:323;;;;:::o;59866:101::-;7390:13;:11;:13::i;:::-;59949:6:::1;59933:13;;:22;;;;;;;;;;;;;;;;;;59866:101:::0;:::o;54337:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;56881:560::-;56999:13;57055:16;57063:7;57055;:16::i;:::-;57029:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;57195:28;57226:10;:8;:10::i;:::-;57195:41;;57310:1;57285:14;57279:28;:32;:150;;;;;;;;;;;;;;;;;57356:14;57372:18;:7;:16;:18::i;:::-;57392:13;57339:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57279:150;57255:174;;;56881:560;;;:::o;60351:212::-;7390:13;:11;:13::i;:::-;60429:6:::1;60425:118;60443:8;;:15;;60439:1;:19;60425:118;;;60515:4;60479:20;:33;60500:8;;60509:1;60500:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60479:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;60460:3;;;;;:::i;:::-;;;;60425:118;;;;60351:212:::0;;:::o;54570:36::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;54422:31::-;;;;:::o;59609:138::-;7390:13;:11;:13::i;:::-;59718:17:::1;59702:13;:33;;;;;;;;;;;;:::i;:::-;;59609:138:::0;:::o;54305:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35576:164::-;35673:4;35697:18;:25;35716:5;35697:25;;;;;;;;;;;;;;;:35;35723:8;35697:35;;;;;;;;;;;;;;;;;;;;;;;;;35690:42;;35576:164;;;;:::o;8410:201::-;7390:13;:11;:13::i;:::-;8519:1:::1;8499:22;;:8;:22;;;;8491:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8575:28;8594:8;8575:18;:28::i;:::-;8410:201:::0;:::o;22806:215::-;22908:4;22947:26;22932:41;;;:11;:41;;;;:81;;;;22977:36;23001:11;22977:23;:36::i;:::-;22932:81;22925:88;;22806:215;;;:::o;7669:132::-;7744:12;:10;:12::i;:::-;7733:23;;:7;:5;:7::i;:::-;:23;;;7725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7669:132::o;24168:332::-;24287:17;:15;:17::i;:::-;24271:33;;:12;:33;;;;24263:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;24390:1;24370:22;;:8;:22;;;;24362:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24457:35;;;;;;;;24469:8;24457:35;;;;;;24479:12;24457:35;;;;;24435:19;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24168:332;;:::o;43082:135::-;43164:16;43172:7;43164;:16::i;:::-;43156:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;43082:135;:::o;6055:98::-;6108:7;6135:10;6128:17;;6055:98;:::o;42361:174::-;42463:2;42436:15;:24;42452:7;42436:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;42519:7;42515:2;42481:46;;42490:23;42505:7;42490:14;:23::i;:::-;42481:46;;;;;;;;;;;;42361:174;;:::o;38594:264::-;38687:4;38704:13;38720:23;38735:7;38720:14;:23::i;:::-;38704:39;;38773:5;38762:16;;:7;:16;;;:52;;;;38782:32;38799:5;38806:7;38782:16;:32::i;:::-;38762:52;:87;;;;38842:7;38818:31;;:20;38830:7;38818:11;:20::i;:::-;:31;;;38762:87;38754:96;;;38594:264;;;;:::o;41617:625::-;41776:4;41749:31;;:23;41764:7;41749:14;:23::i;:::-;:31;;;41741:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;41855:1;41841:16;;:2;:16;;;;41833:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41911:39;41932:4;41938:2;41942:7;41911:20;:39::i;:::-;42015:29;42032:1;42036:7;42015:8;:29::i;:::-;42076:1;42057:9;:15;42067:4;42057:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;42105:1;42088:9;:13;42098:2;42088:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;42136:2;42117:7;:16;42125:7;42117:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;42175:7;42171:2;42156:27;;42165:4;42156:27;;;;;;;;;;;;42196:38;42216:4;42222:2;42226:7;42196:19;:38::i;:::-;41617:625;;;:::o;23800:97::-;23858:6;23884:5;23877:12;;23800:97;:::o;39200:110::-;39276:26;39286:2;39290:7;39276:26;;;;;;;;;;;;:9;:26::i;:::-;39200:110;;:::o;8771:191::-;8845:16;8864:6;;;;;;;;;;;8845:25;;8890:8;8881:6;;:17;;;;;;;;;;;;;;;;;;8945:8;8914:40;;8935:8;8914:40;;;;;;;;;;;;8771:191;;:::o;42678:315::-;42833:8;42824:17;;:5;:17;;;;42816:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42920:8;42882:18;:25;42901:5;42882:25;;;;;;;;;;;;;;;:35;42908:8;42882:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;42966:8;42944:41;;42959:5;42944:41;;;42976:8;42944:41;;;;;;:::i;:::-;;;;;;;;42678:315;;;:::o;37674:313::-;37830:28;37840:4;37846:2;37850:7;37830:9;:28::i;:::-;37877:47;37900:4;37906:2;37910:7;37919:4;37877:22;:47::i;:::-;37869:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;37674:313;;;;:::o;38300:127::-;38365:4;38417:1;38389:30;;:7;:16;38397:7;38389:16;;;;;;;;;;;;;;;;;;;;;:30;;;;38382:37;;38300:127;;;:::o;54870:191::-;54930:13;54956:97;;;;;;;;;;;;;;;;;;;54870:191;:::o;3309:723::-;3365:13;3595:1;3586:5;:10;3582:53;;;3613:10;;;;;;;;;;;;;;;;;;;;;3582:53;3645:12;3660:5;3645:20;;3676:14;3701:78;3716:1;3708:4;:9;3701:78;;3734:8;;;;;:::i;:::-;;;;3765:2;3757:10;;;;;:::i;:::-;;;3701:78;;;3789:19;3821:6;3811:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3789:39;;3839:154;3855:1;3846:5;:10;3839:154;;3883:1;3873:11;;;;;:::i;:::-;;;3950:2;3942:5;:10;;;;:::i;:::-;3929:2;:24;;;;:::i;:::-;3916:39;;3899:6;3906;3899:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;3979:2;3970:11;;;;;:::i;:::-;;;3839:154;;;4017:6;4003:21;;;;;3309:723;;;;:::o;47940:224::-;48042:4;48081:35;48066:50;;;:11;:50;;;;:90;;;;48120:36;48144:11;48120:23;:36::i;:::-;48066:90;48059:97;;47940:224;;;:::o;57451:204::-;57602:45;57629:4;57635:2;57639:7;57602:26;:45::i;:::-;57451:204;;;:::o;45717:125::-;;;;:::o;39537:319::-;39666:18;39672:2;39676:7;39666:5;:18::i;:::-;39717:53;39748:1;39752:2;39756:7;39765:4;39717:22;:53::i;:::-;39695:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;39537:319;;;:::o;43781:853::-;43935:4;43956:15;:2;:13;;;:15::i;:::-;43952:675;;;44008:2;43992:36;;;44029:12;:10;:12::i;:::-;44043:4;44049:7;44058:4;43992:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43988:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44250:1;44233:6;:13;:18;44229:328;;;44276:60;;;;;;;;;;:::i;:::-;;;;;;;;44229:328;44507:6;44501:13;44492:6;44488:2;44484:15;44477:38;43988:584;44124:41;;;44114:51;;;:6;:51;;;;44107:58;;;;;43952:675;44611:4;44604:11;;43781:853;;;;;;;:::o;32667:305::-;32769:4;32821:25;32806:40;;;:11;:40;;;;:105;;;;32878:33;32863:48;;;:11;:48;;;;32806:105;:158;;;;32928:36;32952:11;32928:23;:36::i;:::-;32806:158;32786:178;;32667:305;;;:::o;49616:589::-;49760:45;49787:4;49793:2;49797:7;49760:26;:45::i;:::-;49838:1;49822:18;;:4;:18;;;49818:187;;;49857:40;49889:7;49857:31;:40::i;:::-;49818:187;;;49927:2;49919:10;;:4;:10;;;49915:90;;49946:47;49979:4;49985:7;49946:32;:47::i;:::-;49915:90;49818:187;50033:1;50019:16;;:2;:16;;;50015:183;;;50052:45;50089:7;50052:36;:45::i;:::-;50015:183;;;50125:4;50119:10;;:2;:10;;;50115:83;;50146:40;50174:2;50178:7;50146:27;:40::i;:::-;50115:83;50015:183;49616:589;;;:::o;40192:439::-;40286:1;40272:16;;:2;:16;;;;40264:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40345:16;40353:7;40345;:16::i;:::-;40344:17;40336:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40407:45;40436:1;40440:2;40444:7;40407:20;:45::i;:::-;40482:1;40465:9;:13;40475:2;40465:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40513:2;40494:7;:16;40502:7;40494:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40558:7;40554:2;40533:33;;40550:1;40533:33;;;;;;;;;;;;40579:44;40607:1;40611:2;40615:7;40579:19;:44::i;:::-;40192:439;;:::o;10202:326::-;10262:4;10519:1;10497:7;:19;;;:23;10490:30;;10202:326;;;:::o;21256:157::-;21341:4;21380:25;21365:40;;;:11;:40;;;;21358:47;;21256:157;;;:::o;45206:126::-;;;;:::o;50928:164::-;51032:10;:17;;;;51005:15;:24;51021:7;51005:24;;;;;;;;;;;:44;;;;51060:10;51076:7;51060:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50928:164;:::o;51719:988::-;51985:22;52035:1;52010:22;52027:4;52010:16;:22::i;:::-;:26;;;;:::i;:::-;51985:51;;52047:18;52068:17;:26;52086:7;52068:26;;;;;;;;;;;;52047:47;;52215:14;52201:10;:28;52197:328;;52246:19;52268:12;:18;52281:4;52268:18;;;;;;;;;;;;;;;:34;52287:14;52268:34;;;;;;;;;;;;52246:56;;52352:11;52319:12;:18;52332:4;52319:18;;;;;;;;;;;;;;;:30;52338:10;52319:30;;;;;;;;;;;:44;;;;52469:10;52436:17;:30;52454:11;52436:30;;;;;;;;;;;:43;;;;52197:328;;52621:17;:26;52639:7;52621:26;;;;;;;;;;;52614:33;;;52665:12;:18;52678:4;52665:18;;;;;;;;;;;;;;;:34;52684:14;52665:34;;;;;;;;;;;52658:41;;;51719:988;;;;:::o;53002:1079::-;53255:22;53300:1;53280:10;:17;;;;:21;;;;:::i;:::-;53255:46;;53312:18;53333:15;:24;53349:7;53333:24;;;;;;;;;;;;53312:45;;53684:19;53706:10;53717:14;53706:26;;;;;;;;;;;;;;;;;;;;;;;;53684:48;;53770:11;53745:10;53756;53745:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;53881:10;53850:15;:28;53866:11;53850:28;;;;;;;;;;;:41;;;;54022:15;:24;54038:7;54022:24;;;;;;;;;;;54015:31;;;54057:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53002:1079;;;;:::o;50506:221::-;50591:14;50608:20;50625:2;50608:16;:20::i;:::-;50591:37;;50666:7;50639:12;:16;50652:2;50639:16;;;;;;;;;;;;;;;:24;50656:6;50639:24;;;;;;;;;;;:34;;;;50713:6;50684:17;:26;50702:7;50684:26;;;;;;;;;;;:35;;;;50506:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:155::-;;944:6;931:20;922:29;;960:41;995:5;960:41;:::i;:::-;912:95;;;;:::o;1030:367::-;;;1163:3;1156:4;1148:6;1144:17;1140:27;1130:2;;1181:1;1178;1171:12;1130:2;1217:6;1204:20;1194:30;;1247:18;1239:6;1236:30;1233:2;;;1279:1;1276;1269:12;1233:2;1316:4;1308:6;1304:17;1292:29;;1370:3;1362:4;1354:6;1350:17;1340:8;1336:32;1333:41;1330:2;;;1387:1;1384;1377:12;1330:2;1120:277;;;;;:::o;1428:375::-;;;1569:3;1562:4;1554:6;1550:17;1546:27;1536:2;;1587:1;1584;1577:12;1536:2;1623:6;1610:20;1600:30;;1653:18;1645:6;1642:30;1639:2;;;1685:1;1682;1675:12;1639:2;1722:4;1714:6;1710:17;1698:29;;1776:3;1768:4;1760:6;1756:17;1746:8;1742:32;1739:41;1736:2;;;1793:1;1790;1783:12;1736:2;1526:277;;;;;:::o;1809:133::-;;1890:6;1877:20;1868:29;;1906:30;1930:5;1906:30;:::i;:::-;1858:84;;;;:::o;1948:137::-;;2033:6;2027:13;2018:22;;2049:30;2073:5;2049:30;:::i;:::-;2008:77;;;;:::o;2091:137::-;;2174:6;2161:20;2152:29;;2190:32;2216:5;2190:32;:::i;:::-;2142:86;;;;:::o;2234:141::-;;2321:6;2315:13;2306:22;;2337:32;2363:5;2337:32;:::i;:::-;2296:79;;;;:::o;2394:271::-;;2498:3;2491:4;2483:6;2479:17;2475:27;2465:2;;2516:1;2513;2506:12;2465:2;2556:6;2543:20;2581:78;2655:3;2647:6;2640:4;2632:6;2628:17;2581:78;:::i;:::-;2572:87;;2455:210;;;;;:::o;2685:352::-;;;2803:3;2796:4;2788:6;2784:17;2780:27;2770:2;;2821:1;2818;2811:12;2770:2;2857:6;2844:20;2834:30;;2887:18;2879:6;2876:30;2873:2;;;2919:1;2916;2909:12;2873:2;2956:4;2948:6;2944:17;2932:29;;3010:3;3002:4;2994:6;2990:17;2980:8;2976:32;2973:41;2970:2;;;3027:1;3024;3017:12;2970:2;2760:277;;;;;:::o;3057:273::-;;3162:3;3155:4;3147:6;3143:17;3139:27;3129:2;;3180:1;3177;3170:12;3129:2;3220:6;3207:20;3245:79;3320:3;3312:6;3305:4;3297:6;3293:17;3245:79;:::i;:::-;3236:88;;3119:211;;;;;:::o;3336:139::-;;3420:6;3407:20;3398:29;;3436:33;3463:5;3436:33;:::i;:::-;3388:87;;;;:::o;3481:143::-;;3569:6;3563:13;3554:22;;3585:33;3612:5;3585:33;:::i;:::-;3544:80;;;;:::o;3630:137::-;;3713:6;3700:20;3691:29;;3729:32;3755:5;3729:32;:::i;:::-;3681:86;;;;:::o;3773:262::-;;3881:2;3869:9;3860:7;3856:23;3852:32;3849:2;;;3897:1;3894;3887:12;3849:2;3940:1;3965:53;4010:7;4001:6;3990:9;3986:22;3965:53;:::i;:::-;3955:63;;3911:117;3839:196;;;;:::o;4041:278::-;;4157:2;4145:9;4136:7;4132:23;4128:32;4125:2;;;4173:1;4170;4163:12;4125:2;4216:1;4241:61;4294:7;4285:6;4274:9;4270:22;4241:61;:::i;:::-;4231:71;;4187:125;4115:204;;;;:::o;4325:407::-;;;4450:2;4438:9;4429:7;4425:23;4421:32;4418:2;;;4466:1;4463;4456:12;4418:2;4509:1;4534:53;4579:7;4570:6;4559:9;4555:22;4534:53;:::i;:::-;4524:63;;4480:117;4636:2;4662:53;4707:7;4698:6;4687:9;4683:22;4662:53;:::i;:::-;4652:63;;4607:118;4408:324;;;;;:::o;4738:552::-;;;;4880:2;4868:9;4859:7;4855:23;4851:32;4848:2;;;4896:1;4893;4886:12;4848:2;4939:1;4964:53;5009:7;5000:6;4989:9;4985:22;4964:53;:::i;:::-;4954:63;;4910:117;5066:2;5092:53;5137:7;5128:6;5117:9;5113:22;5092:53;:::i;:::-;5082:63;;5037:118;5194:2;5220:53;5265:7;5256:6;5245:9;5241:22;5220:53;:::i;:::-;5210:63;;5165:118;4838:452;;;;;:::o;5296:809::-;;;;;5464:3;5452:9;5443:7;5439:23;5435:33;5432:2;;;5481:1;5478;5471:12;5432:2;5524:1;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5495:117;5651:2;5677:53;5722:7;5713:6;5702:9;5698:22;5677:53;:::i;:::-;5667:63;;5622:118;5779:2;5805:53;5850:7;5841:6;5830:9;5826:22;5805:53;:::i;:::-;5795:63;;5750:118;5935:2;5924:9;5920:18;5907:32;5966:18;5958:6;5955:30;5952:2;;;5998:1;5995;5988:12;5952:2;6026:62;6080:7;6071:6;6060:9;6056:22;6026:62;:::i;:::-;6016:72;;5878:220;5422:683;;;;;;;:::o;6111:401::-;;;6233:2;6221:9;6212:7;6208:23;6204:32;6201:2;;;6249:1;6246;6239:12;6201:2;6292:1;6317:53;6362:7;6353:6;6342:9;6338:22;6317:53;:::i;:::-;6307:63;;6263:117;6419:2;6445:50;6487:7;6478:6;6467:9;6463:22;6445:50;:::i;:::-;6435:60;;6390:115;6191:321;;;;;:::o;6518:407::-;;;6643:2;6631:9;6622:7;6618:23;6614:32;6611:2;;;6659:1;6656;6649:12;6611:2;6702:1;6727:53;6772:7;6763:6;6752:9;6748:22;6727:53;:::i;:::-;6717:63;;6673:117;6829:2;6855:53;6900:7;6891:6;6880:9;6876:22;6855:53;:::i;:::-;6845:63;;6800:118;6601:324;;;;;:::o;6931:405::-;;;7055:2;7043:9;7034:7;7030:23;7026:32;7023:2;;;7071:1;7068;7061:12;7023:2;7114:1;7139:53;7184:7;7175:6;7164:9;7160:22;7139:53;:::i;:::-;7129:63;;7085:117;7241:2;7267:52;7311:7;7302:6;7291:9;7287:22;7267:52;:::i;:::-;7257:62;;7212:117;7013:323;;;;;:::o;7342:425::-;;;7485:2;7473:9;7464:7;7460:23;7456:32;7453:2;;;7501:1;7498;7491:12;7453:2;7572:1;7561:9;7557:17;7544:31;7602:18;7594:6;7591:30;7588:2;;;7634:1;7631;7624:12;7588:2;7670:80;7742:7;7733:6;7722:9;7718:22;7670:80;:::i;:::-;7652:98;;;;7515:245;7443:324;;;;;:::o;7773:441::-;;;7924:2;7912:9;7903:7;7899:23;7895:32;7892:2;;;7940:1;7937;7930:12;7892:2;8011:1;8000:9;7996:17;7983:31;8041:18;8033:6;8030:30;8027:2;;;8073:1;8070;8063:12;8027:2;8109:88;8189:7;8180:6;8169:9;8165:22;8109:88;:::i;:::-;8091:106;;;;7954:253;7882:332;;;;;:::o;8220:256::-;;8325:2;8313:9;8304:7;8300:23;8296:32;8293:2;;;8341:1;8338;8331:12;8293:2;8384:1;8409:50;8451:7;8442:6;8431:9;8427:22;8409:50;:::i;:::-;8399:60;;8355:114;8283:193;;;;:::o;8482:278::-;;8598:2;8586:9;8577:7;8573:23;8569:32;8566:2;;;8614:1;8611;8604:12;8566:2;8657:1;8682:61;8735:7;8726:6;8715:9;8711:22;8682:61;:::i;:::-;8672:71;;8628:125;8556:204;;;;:::o;8766:260::-;;8873:2;8861:9;8852:7;8848:23;8844:32;8841:2;;;8889:1;8886;8879:12;8841:2;8932:1;8957:52;9001:7;8992:6;8981:9;8977:22;8957:52;:::i;:::-;8947:62;;8903:116;8831:195;;;;:::o;9032:282::-;;9150:2;9138:9;9129:7;9125:23;9121:32;9118:2;;;9166:1;9163;9156:12;9118:2;9209:1;9234:63;9289:7;9280:6;9269:9;9265:22;9234:63;:::i;:::-;9224:73;;9180:127;9108:206;;;;:::o;9320:395::-;;;9448:2;9436:9;9427:7;9423:23;9419:32;9416:2;;;9464:1;9461;9454:12;9416:2;9535:1;9524:9;9520:17;9507:31;9565:18;9557:6;9554:30;9551:2;;;9597:1;9594;9587:12;9551:2;9633:65;9690:7;9681:6;9670:9;9666:22;9633:65;:::i;:::-;9615:83;;;;9478:230;9406:309;;;;;:::o;9721:375::-;;9839:2;9827:9;9818:7;9814:23;9810:32;9807:2;;;9855:1;9852;9845:12;9807:2;9926:1;9915:9;9911:17;9898:31;9956:18;9948:6;9945:30;9942:2;;;9988:1;9985;9978:12;9942:2;10016:63;10071:7;10062:6;10051:9;10047:22;10016:63;:::i;:::-;10006:73;;9869:220;9797:299;;;;:::o;10102:262::-;;10210:2;10198:9;10189:7;10185:23;10181:32;10178:2;;;10226:1;10223;10216:12;10178:2;10269:1;10294:53;10339:7;10330:6;10319:9;10315:22;10294:53;:::i;:::-;10284:63;;10240:117;10168:196;;;;:::o;10370:284::-;;10489:2;10477:9;10468:7;10464:23;10460:32;10457:2;;;10505:1;10502;10495:12;10457:2;10548:1;10573:64;10629:7;10620:6;10609:9;10605:22;10573:64;:::i;:::-;10563:74;;10519:128;10447:207;;;;:::o;10660:407::-;;;10785:2;10773:9;10764:7;10760:23;10756:32;10753:2;;;10801:1;10798;10791:12;10753:2;10844:1;10869:53;10914:7;10905:6;10894:9;10890:22;10869:53;:::i;:::-;10859:63;;10815:117;10971:2;10997:53;11042:7;11033:6;11022:9;11018:22;10997:53;:::i;:::-;10987:63;;10942:118;10743:324;;;;;:::o;11073:179::-;;11163:46;11205:3;11197:6;11163:46;:::i;:::-;11241:4;11236:3;11232:14;11218:28;;11153:99;;;;:::o;11258:147::-;11353:45;11392:5;11353:45;:::i;:::-;11348:3;11341:58;11331:74;;:::o;11411:142::-;11514:32;11540:5;11514:32;:::i;:::-;11509:3;11502:45;11492:61;;:::o;11559:118::-;11646:24;11664:5;11646:24;:::i;:::-;11641:3;11634:37;11624:53;;:::o;11713:732::-;;11861:54;11909:5;11861:54;:::i;:::-;11931:86;12010:6;12005:3;11931:86;:::i;:::-;11924:93;;12041:56;12091:5;12041:56;:::i;:::-;12120:7;12151:1;12136:284;12161:6;12158:1;12155:13;12136:284;;;12237:6;12231:13;12264:63;12323:3;12308:13;12264:63;:::i;:::-;12257:70;;12350:60;12403:6;12350:60;:::i;:::-;12340:70;;12196:224;12183:1;12180;12176:9;12171:14;;12136:284;;;12140:14;12436:3;12429:10;;11837:608;;;;;;;:::o;12451:109::-;12532:21;12547:5;12532:21;:::i;:::-;12527:3;12520:34;12510:50;;:::o;12566:360::-;;12680:38;12712:5;12680:38;:::i;:::-;12734:70;12797:6;12792:3;12734:70;:::i;:::-;12727:77;;12813:52;12858:6;12853:3;12846:4;12839:5;12835:16;12813:52;:::i;:::-;12890:29;12912:6;12890:29;:::i;:::-;12885:3;12881:39;12874:46;;12656:270;;;;;:::o;12932:364::-;;13048:39;13081:5;13048:39;:::i;:::-;13103:71;13167:6;13162:3;13103:71;:::i;:::-;13096:78;;13183:52;13228:6;13223:3;13216:4;13209:5;13205:16;13183:52;:::i;:::-;13260:29;13282:6;13260:29;:::i;:::-;13255:3;13251:39;13244:46;;13024:272;;;;;:::o;13302:377::-;;13436:39;13469:5;13436:39;:::i;:::-;13491:89;13573:6;13568:3;13491:89;:::i;:::-;13484:96;;13589:52;13634:6;13629:3;13622:4;13615:5;13611:16;13589:52;:::i;:::-;13666:6;13661:3;13657:16;13650:23;;13412:267;;;;;:::o;13709:845::-;;13849:5;13843:12;13878:36;13904:9;13878:36;:::i;:::-;13930:89;14012:6;14007:3;13930:89;:::i;:::-;13923:96;;14050:1;14039:9;14035:17;14066:1;14061:137;;;;14212:1;14207:341;;;;14028:520;;14061:137;14145:4;14141:9;14130;14126:25;14121:3;14114:38;14181:6;14176:3;14172:16;14165:23;;14061:137;;14207:341;14274:38;14306:5;14274:38;:::i;:::-;14334:1;14348:154;14362:6;14359:1;14356:13;14348:154;;;14436:7;14430:14;14426:1;14421:3;14417:11;14410:35;14486:1;14477:7;14473:15;14462:26;;14384:4;14381:1;14377:12;14372:17;;14348:154;;;14531:6;14526:3;14522:16;14515:23;;14214:334;;14028:520;;13816:738;;;;;;:::o;14560:366::-;;14723:67;14787:2;14782:3;14723:67;:::i;:::-;14716:74;;14799:93;14888:3;14799:93;:::i;:::-;14917:2;14912:3;14908:12;14901:19;;14706:220;;;:::o;14932:366::-;;15095:67;15159:2;15154:3;15095:67;:::i;:::-;15088:74;;15171:93;15260:3;15171:93;:::i;:::-;15289:2;15284:3;15280:12;15273:19;;15078:220;;;:::o;15304:366::-;;15467:67;15531:2;15526:3;15467:67;:::i;:::-;15460:74;;15543:93;15632:3;15543:93;:::i;:::-;15661:2;15656:3;15652:12;15645:19;;15450:220;;;:::o;15676:366::-;;15839:67;15903:2;15898:3;15839:67;:::i;:::-;15832:74;;15915:93;16004:3;15915:93;:::i;:::-;16033:2;16028:3;16024:12;16017:19;;15822:220;;;:::o;16048:366::-;;16211:67;16275:2;16270:3;16211:67;:::i;:::-;16204:74;;16287:93;16376:3;16287:93;:::i;:::-;16405:2;16400:3;16396:12;16389:19;;16194:220;;;:::o;16420:366::-;;16583:67;16647:2;16642:3;16583:67;:::i;:::-;16576:74;;16659:93;16748:3;16659:93;:::i;:::-;16777:2;16772:3;16768:12;16761:19;;16566:220;;;:::o;16792:366::-;;16955:67;17019:2;17014:3;16955:67;:::i;:::-;16948:74;;17031:93;17120:3;17031:93;:::i;:::-;17149:2;17144:3;17140:12;17133:19;;16938:220;;;:::o;17164:366::-;;17327:67;17391:2;17386:3;17327:67;:::i;:::-;17320:74;;17403:93;17492:3;17403:93;:::i;:::-;17521:2;17516:3;17512:12;17505:19;;17310:220;;;:::o;17536:366::-;;17699:67;17763:2;17758:3;17699:67;:::i;:::-;17692:74;;17775:93;17864:3;17775:93;:::i;:::-;17893:2;17888:3;17884:12;17877:19;;17682:220;;;:::o;17908:366::-;;18071:67;18135:2;18130:3;18071:67;:::i;:::-;18064:74;;18147:93;18236:3;18147:93;:::i;:::-;18265:2;18260:3;18256:12;18249:19;;18054:220;;;:::o;18280:366::-;;18443:67;18507:2;18502:3;18443:67;:::i;:::-;18436:74;;18519:93;18608:3;18519:93;:::i;:::-;18637:2;18632:3;18628:12;18621:19;;18426:220;;;:::o;18652:366::-;;18815:67;18879:2;18874:3;18815:67;:::i;:::-;18808:74;;18891:93;18980:3;18891:93;:::i;:::-;19009:2;19004:3;19000:12;18993:19;;18798:220;;;:::o;19024:366::-;;19187:67;19251:2;19246:3;19187:67;:::i;:::-;19180:74;;19263:93;19352:3;19263:93;:::i;:::-;19381:2;19376:3;19372:12;19365:19;;19170:220;;;:::o;19396:366::-;;19559:67;19623:2;19618:3;19559:67;:::i;:::-;19552:74;;19635:93;19724:3;19635:93;:::i;:::-;19753:2;19748:3;19744:12;19737:19;;19542:220;;;:::o;19768:366::-;;19931:67;19995:2;19990:3;19931:67;:::i;:::-;19924:74;;20007:93;20096:3;20007:93;:::i;:::-;20125:2;20120:3;20116:12;20109:19;;19914:220;;;:::o;20140:366::-;;20303:67;20367:2;20362:3;20303:67;:::i;:::-;20296:74;;20379:93;20468:3;20379:93;:::i;:::-;20497:2;20492:3;20488:12;20481:19;;20286:220;;;:::o;20512:366::-;;20675:67;20739:2;20734:3;20675:67;:::i;:::-;20668:74;;20751:93;20840:3;20751:93;:::i;:::-;20869:2;20864:3;20860:12;20853:19;;20658:220;;;:::o;20884:366::-;;21047:67;21111:2;21106:3;21047:67;:::i;:::-;21040:74;;21123:93;21212:3;21123:93;:::i;:::-;21241:2;21236:3;21232:12;21225:19;;21030:220;;;:::o;21256:366::-;;21419:67;21483:2;21478:3;21419:67;:::i;:::-;21412:74;;21495:93;21584:3;21495:93;:::i;:::-;21613:2;21608:3;21604:12;21597:19;;21402:220;;;:::o;21628:366::-;;21791:67;21855:2;21850:3;21791:67;:::i;:::-;21784:74;;21867:93;21956:3;21867:93;:::i;:::-;21985:2;21980:3;21976:12;21969:19;;21774:220;;;:::o;22000:108::-;22077:24;22095:5;22077:24;:::i;:::-;22072:3;22065:37;22055:53;;:::o;22114:118::-;22201:24;22219:5;22201:24;:::i;:::-;22196:3;22189:37;22179:53;;:::o;22238:589::-;;22485:95;22576:3;22567:6;22485:95;:::i;:::-;22478:102;;22597:95;22688:3;22679:6;22597:95;:::i;:::-;22590:102;;22709:92;22797:3;22788:6;22709:92;:::i;:::-;22702:99;;22818:3;22811:10;;22467:360;;;;;;:::o;22833:222::-;;22964:2;22953:9;22949:18;22941:26;;22977:71;23045:1;23034:9;23030:17;23021:6;22977:71;:::i;:::-;22931:124;;;;:::o;23061:254::-;;23208:2;23197:9;23193:18;23185:26;;23221:87;23305:1;23294:9;23290:17;23281:6;23221:87;:::i;:::-;23175:140;;;;:::o;23321:458::-;;23516:2;23505:9;23501:18;23493:26;;23529:71;23597:1;23586:9;23582:17;23573:6;23529:71;:::i;:::-;23610:80;23686:2;23675:9;23671:18;23662:6;23610:80;:::i;:::-;23700:72;23768:2;23757:9;23753:18;23744:6;23700:72;:::i;:::-;23483:296;;;;;;:::o;23785:442::-;;23972:2;23961:9;23957:18;23949:26;;23985:71;24053:1;24042:9;24038:17;24029:6;23985:71;:::i;:::-;24066:72;24134:2;24123:9;24119:18;24110:6;24066:72;:::i;:::-;24148;24216:2;24205:9;24201:18;24192:6;24148:72;:::i;:::-;23939:288;;;;;;:::o;24233:640::-;;24466:3;24455:9;24451:19;24443:27;;24480:71;24548:1;24537:9;24533:17;24524:6;24480:71;:::i;:::-;24561:72;24629:2;24618:9;24614:18;24605:6;24561:72;:::i;:::-;24643;24711:2;24700:9;24696:18;24687:6;24643:72;:::i;:::-;24762:9;24756:4;24752:20;24747:2;24736:9;24732:18;24725:48;24790:76;24861:4;24852:6;24790:76;:::i;:::-;24782:84;;24433:440;;;;;;;:::o;24879:332::-;;25038:2;25027:9;25023:18;25015:26;;25051:71;25119:1;25108:9;25104:17;25095:6;25051:71;:::i;:::-;25132:72;25200:2;25189:9;25185:18;25176:6;25132:72;:::i;:::-;25005:206;;;;;:::o;25217:373::-;;25398:2;25387:9;25383:18;25375:26;;25447:9;25441:4;25437:20;25433:1;25422:9;25418:17;25411:47;25475:108;25578:4;25569:6;25475:108;:::i;:::-;25467:116;;25365:225;;;;:::o;25596:210::-;;25721:2;25710:9;25706:18;25698:26;;25734:65;25796:1;25785:9;25781:17;25772:6;25734:65;:::i;:::-;25688:118;;;;:::o;25812:313::-;;25963:2;25952:9;25948:18;25940:26;;26012:9;26006:4;26002:20;25998:1;25987:9;25983:17;25976:47;26040:78;26113:4;26104:6;26040:78;:::i;:::-;26032:86;;25930:195;;;;:::o;26131:419::-;;26335:2;26324:9;26320:18;26312:26;;26384:9;26378:4;26374:20;26370:1;26359:9;26355:17;26348:47;26412:131;26538:4;26412:131;:::i;:::-;26404:139;;26302:248;;;:::o;26556:419::-;;26760:2;26749:9;26745:18;26737:26;;26809:9;26803:4;26799:20;26795:1;26784:9;26780:17;26773:47;26837:131;26963:4;26837:131;:::i;:::-;26829:139;;26727:248;;;:::o;26981:419::-;;27185:2;27174:9;27170:18;27162:26;;27234:9;27228:4;27224:20;27220:1;27209:9;27205:17;27198:47;27262:131;27388:4;27262:131;:::i;:::-;27254:139;;27152:248;;;:::o;27406:419::-;;27610:2;27599:9;27595:18;27587:26;;27659:9;27653:4;27649:20;27645:1;27634:9;27630:17;27623:47;27687:131;27813:4;27687:131;:::i;:::-;27679:139;;27577:248;;;:::o;27831:419::-;;28035:2;28024:9;28020:18;28012:26;;28084:9;28078:4;28074:20;28070:1;28059:9;28055:17;28048:47;28112:131;28238:4;28112:131;:::i;:::-;28104:139;;28002:248;;;:::o;28256:419::-;;28460:2;28449:9;28445:18;28437:26;;28509:9;28503:4;28499:20;28495:1;28484:9;28480:17;28473:47;28537:131;28663:4;28537:131;:::i;:::-;28529:139;;28427:248;;;:::o;28681:419::-;;28885:2;28874:9;28870:18;28862:26;;28934:9;28928:4;28924:20;28920:1;28909:9;28905:17;28898:47;28962:131;29088:4;28962:131;:::i;:::-;28954:139;;28852:248;;;:::o;29106:419::-;;29310:2;29299:9;29295:18;29287:26;;29359:9;29353:4;29349:20;29345:1;29334:9;29330:17;29323:47;29387:131;29513:4;29387:131;:::i;:::-;29379:139;;29277:248;;;:::o;29531:419::-;;29735:2;29724:9;29720:18;29712:26;;29784:9;29778:4;29774:20;29770:1;29759:9;29755:17;29748:47;29812:131;29938:4;29812:131;:::i;:::-;29804:139;;29702:248;;;:::o;29956:419::-;;30160:2;30149:9;30145:18;30137:26;;30209:9;30203:4;30199:20;30195:1;30184:9;30180:17;30173:47;30237:131;30363:4;30237:131;:::i;:::-;30229:139;;30127:248;;;:::o;30381:419::-;;30585:2;30574:9;30570:18;30562:26;;30634:9;30628:4;30624:20;30620:1;30609:9;30605:17;30598:47;30662:131;30788:4;30662:131;:::i;:::-;30654:139;;30552:248;;;:::o;30806:419::-;;31010:2;30999:9;30995:18;30987:26;;31059:9;31053:4;31049:20;31045:1;31034:9;31030:17;31023:47;31087:131;31213:4;31087:131;:::i;:::-;31079:139;;30977:248;;;:::o;31231:419::-;;31435:2;31424:9;31420:18;31412:26;;31484:9;31478:4;31474:20;31470:1;31459:9;31455:17;31448:47;31512:131;31638:4;31512:131;:::i;:::-;31504:139;;31402:248;;;:::o;31656:419::-;;31860:2;31849:9;31845:18;31837:26;;31909:9;31903:4;31899:20;31895:1;31884:9;31880:17;31873:47;31937:131;32063:4;31937:131;:::i;:::-;31929:139;;31827:248;;;:::o;32081:419::-;;32285:2;32274:9;32270:18;32262:26;;32334:9;32328:4;32324:20;32320:1;32309:9;32305:17;32298:47;32362:131;32488:4;32362:131;:::i;:::-;32354:139;;32252:248;;;:::o;32506:419::-;;32710:2;32699:9;32695:18;32687:26;;32759:9;32753:4;32749:20;32745:1;32734:9;32730:17;32723:47;32787:131;32913:4;32787:131;:::i;:::-;32779:139;;32677:248;;;:::o;32931:419::-;;33135:2;33124:9;33120:18;33112:26;;33184:9;33178:4;33174:20;33170:1;33159:9;33155:17;33148:47;33212:131;33338:4;33212:131;:::i;:::-;33204:139;;33102:248;;;:::o;33356:419::-;;33560:2;33549:9;33545:18;33537:26;;33609:9;33603:4;33599:20;33595:1;33584:9;33580:17;33573:47;33637:131;33763:4;33637:131;:::i;:::-;33629:139;;33527:248;;;:::o;33781:419::-;;33985:2;33974:9;33970:18;33962:26;;34034:9;34028:4;34024:20;34020:1;34009:9;34005:17;33998:47;34062:131;34188:4;34062:131;:::i;:::-;34054:139;;33952:248;;;:::o;34206:419::-;;34410:2;34399:9;34395:18;34387:26;;34459:9;34453:4;34449:20;34445:1;34434:9;34430:17;34423:47;34487:131;34613:4;34487:131;:::i;:::-;34479:139;;34377:248;;;:::o;34631:222::-;;34762:2;34751:9;34747:18;34739:26;;34775:71;34843:1;34832:9;34828:17;34819:6;34775:71;:::i;:::-;34729:124;;;;:::o;34859:129::-;;34920:20;;:::i;:::-;34910:30;;34949:33;34977:4;34969:6;34949:33;:::i;:::-;34900:88;;;:::o;34994:75::-;;35060:2;35054:9;35044:19;;35034:35;:::o;35075:307::-;;35226:18;35218:6;35215:30;35212:2;;;35248:18;;:::i;:::-;35212:2;35286:29;35308:6;35286:29;:::i;:::-;35278:37;;35370:4;35364;35360:15;35352:23;;35141:241;;;:::o;35388:308::-;;35540:18;35532:6;35529:30;35526:2;;;35562:18;;:::i;:::-;35526:2;35600:29;35622:6;35600:29;:::i;:::-;35592:37;;35684:4;35678;35674:15;35666:23;;35455:241;;;:::o;35702:132::-;;35792:3;35784:11;;35822:4;35817:3;35813:14;35805:22;;35774:60;;;:::o;35840:141::-;;35912:3;35904:11;;35935:3;35932:1;35925:14;35969:4;35966:1;35956:18;35948:26;;35894:87;;;:::o;35987:114::-;;36088:5;36082:12;36072:22;;36061:40;;;:::o;36107:98::-;;36192:5;36186:12;36176:22;;36165:40;;;:::o;36211:99::-;;36297:5;36291:12;36281:22;;36270:40;;;:::o;36316:113::-;;36418:4;36413:3;36409:14;36401:22;;36391:38;;;:::o;36435:184::-;;36568:6;36563:3;36556:19;36608:4;36603:3;36599:14;36584:29;;36546:73;;;;:::o;36625:168::-;;36742:6;36737:3;36730:19;36782:4;36777:3;36773:14;36758:29;;36720:73;;;;:::o;36799:169::-;;36917:6;36912:3;36905:19;36957:4;36952:3;36948:14;36933:29;;36895:73;;;;:::o;36974:148::-;;37113:3;37098:18;;37088:34;;;;:::o;37128:305::-;;37187:20;37205:1;37187:20;:::i;:::-;37182:25;;37221:20;37239:1;37221:20;:::i;:::-;37216:25;;37375:1;37307:66;37303:74;37300:1;37297:81;37294:2;;;37381:18;;:::i;:::-;37294:2;37425:1;37422;37418:9;37411:16;;37172:261;;;;:::o;37439:185::-;;37496:20;37514:1;37496:20;:::i;:::-;37491:25;;37530:20;37548:1;37530:20;:::i;:::-;37525:25;;37569:1;37559:2;;37574:18;;:::i;:::-;37559:2;37616:1;37613;37609:9;37604:14;;37481:143;;;;:::o;37630:348::-;;37693:20;37711:1;37693:20;:::i;:::-;37688:25;;37727:20;37745:1;37727:20;:::i;:::-;37722:25;;37915:1;37847:66;37843:74;37840:1;37837:81;37832:1;37825:9;37818:17;37814:105;37811:2;;;37922:18;;:::i;:::-;37811:2;37970:1;37967;37963:9;37952:20;;37678:300;;;;:::o;37984:191::-;;38044:20;38062:1;38044:20;:::i;:::-;38039:25;;38078:20;38096:1;38078:20;:::i;:::-;38073:25;;38117:1;38114;38111:8;38108:2;;;38122:18;;:::i;:::-;38108:2;38167:1;38164;38160:9;38152:17;;38029:146;;;;:::o;38181:96::-;;38247:24;38265:5;38247:24;:::i;:::-;38236:35;;38226:51;;;:::o;38283:104::-;;38357:24;38375:5;38357:24;:::i;:::-;38346:35;;38336:51;;;:::o;38393:90::-;;38470:5;38463:13;38456:21;38445:32;;38435:48;;;:::o;38489:149::-;;38565:66;38558:5;38554:78;38543:89;;38533:105;;;:::o;38644:126::-;;38721:42;38714:5;38710:54;38699:65;;38689:81;;;:::o;38776:77::-;;38842:5;38831:16;;38821:32;;;:::o;38859:109::-;;38935:26;38928:5;38924:38;38913:49;;38903:65;;;:::o;38974:134::-;;39065:37;39096:5;39065:37;:::i;:::-;39052:50;;39042:66;;;:::o;39114:126::-;;39197:37;39228:5;39197:37;:::i;:::-;39184:50;;39174:66;;;:::o;39246:113::-;;39329:24;39347:5;39329:24;:::i;:::-;39316:37;;39306:53;;;:::o;39365:154::-;39449:6;39444:3;39439;39426:30;39511:1;39502:6;39497:3;39493:16;39486:27;39416:103;;;:::o;39525:307::-;39593:1;39603:113;39617:6;39614:1;39611:13;39603:113;;;39702:1;39697:3;39693:11;39687:18;39683:1;39678:3;39674:11;39667:39;39639:2;39636:1;39632:10;39627:15;;39603:113;;;39734:6;39731:1;39728:13;39725:2;;;39814:1;39805:6;39800:3;39796:16;39789:27;39725:2;39574:258;;;;:::o;39838:320::-;;39919:1;39913:4;39909:12;39899:22;;39966:1;39960:4;39956:12;39987:18;39977:2;;40043:4;40035:6;40031:17;40021:27;;39977:2;40105;40097:6;40094:14;40074:18;40071:38;40068:2;;;40124:18;;:::i;:::-;40068:2;39889:269;;;;:::o;40164:281::-;40247:27;40269:4;40247:27;:::i;:::-;40239:6;40235:40;40377:6;40365:10;40362:22;40341:18;40329:10;40326:34;40323:62;40320:2;;;40388:18;;:::i;:::-;40320:2;40428:10;40424:2;40417:22;40207:238;;;:::o;40451:233::-;;40513:24;40531:5;40513:24;:::i;:::-;40504:33;;40559:66;40552:5;40549:77;40546:2;;;40629:18;;:::i;:::-;40546:2;40676:1;40669:5;40665:13;40658:20;;40494:190;;;:::o;40690:176::-;;40739:20;40757:1;40739:20;:::i;:::-;40734:25;;40773:20;40791:1;40773:20;:::i;:::-;40768:25;;40812:1;40802:2;;40817:18;;:::i;:::-;40802:2;40858:1;40855;40851:9;40846:14;;40724:142;;;;:::o;40872:180::-;40920:77;40917:1;40910:88;41017:4;41014:1;41007:15;41041:4;41038:1;41031:15;41058:180;41106:77;41103:1;41096:88;41203:4;41200:1;41193:15;41227:4;41224:1;41217:15;41244:180;41292:77;41289:1;41282:88;41389:4;41386:1;41379:15;41413:4;41410:1;41403:15;41430:180;41478:77;41475:1;41468:88;41575:4;41572:1;41565:15;41599:4;41596:1;41589:15;41616:102;;41708:2;41704:7;41699:2;41692:5;41688:14;41684:28;41674:38;;41664:54;;;:::o;41724:230::-;41864:34;41860:1;41852:6;41848:14;41841:58;41933:13;41928:2;41920:6;41916:15;41909:38;41830:124;:::o;41960:237::-;42100:34;42096:1;42088:6;42084:14;42077:58;42169:20;42164:2;42156:6;42152:15;42145:45;42066:131;:::o;42203:225::-;42343:34;42339:1;42331:6;42327:14;42320:58;42412:8;42407:2;42399:6;42395:15;42388:33;42309:119;:::o;42434:224::-;42574:34;42570:1;42562:6;42558:14;42551:58;42643:7;42638:2;42630:6;42626:15;42619:32;42540:118;:::o;42664:178::-;42804:30;42800:1;42792:6;42788:14;42781:54;42770:72;:::o;42848:223::-;42988:34;42984:1;42976:6;42972:14;42965:58;43057:6;43052:2;43044:6;43040:15;43033:31;42954:117;:::o;43077:175::-;43217:27;43213:1;43205:6;43201:14;43194:51;43183:69;:::o;43258:228::-;43398:34;43394:1;43386:6;43382:14;43375:58;43467:11;43462:2;43454:6;43450:15;43443:36;43364:122;:::o;43492:249::-;43632:34;43628:1;43620:6;43616:14;43609:58;43701:32;43696:2;43688:6;43684:15;43677:57;43598:143;:::o;43747:182::-;43887:34;43883:1;43875:6;43871:14;43864:58;43853:76;:::o;43935:182::-;44075:34;44071:1;44063:6;44059:14;44052:58;44041:76;:::o;44123:234::-;44263:34;44259:1;44251:6;44247:14;44240:58;44332:17;44327:2;44319:6;44315:15;44308:42;44229:128;:::o;44363:174::-;44503:26;44499:1;44491:6;44487:14;44480:50;44469:68;:::o;44543:220::-;44683:34;44679:1;44671:6;44667:14;44660:58;44752:3;44747:2;44739:6;44735:15;44728:28;44649:114;:::o;44769:176::-;44909:28;44905:1;44897:6;44893:14;44886:52;44875:70;:::o;44951:231::-;45091:34;45087:1;45079:6;45075:14;45068:58;45160:14;45155:2;45147:6;45143:15;45136:39;45057:125;:::o;45188:229::-;45328:34;45324:1;45316:6;45312:14;45305:58;45397:12;45392:2;45384:6;45380:15;45373:37;45294:123;:::o;45423:176::-;45563:28;45559:1;45551:6;45547:14;45540:52;45529:70;:::o;45605:233::-;45745:34;45741:1;45733:6;45729:14;45722:58;45814:16;45809:2;45801:6;45797:15;45790:41;45711:127;:::o;45844:175::-;45984:27;45980:1;45972:6;45968:14;45961:51;45950:69;:::o;46025:122::-;46098:24;46116:5;46098:24;:::i;:::-;46091:5;46088:35;46078:2;;46137:1;46134;46127:12;46078:2;46068:79;:::o;46153:138::-;46234:32;46260:5;46234:32;:::i;:::-;46227:5;46224:43;46214:2;;46281:1;46278;46271:12;46214:2;46204:87;:::o;46297:116::-;46367:21;46382:5;46367:21;:::i;:::-;46360:5;46357:32;46347:2;;46403:1;46400;46393:12;46347:2;46337:76;:::o;46419:120::-;46491:23;46508:5;46491:23;:::i;:::-;46484:5;46481:34;46471:2;;46529:1;46526;46519:12;46471:2;46461:78;:::o;46545:122::-;46618:24;46636:5;46618:24;:::i;:::-;46611:5;46608:35;46598:2;;46657:1;46654;46647:12;46598:2;46588:79;:::o;46673:120::-;46745:23;46762:5;46745:23;:::i;:::-;46738:5;46735:34;46725:2;;46783:1;46780;46773:12;46725:2;46715:78;:::o
Swarm Source
ipfs://f7e4d8060b56a80242605d17326ef1eb308fa24c674455a373b4d29d85cce6bb
Loading...
Loading
Loading...
Loading
OVERVIEW
An Exclusive NFT Membership designed with the Web3 innovator in mind. Users can stake their NFT to receive royalties in ETH.Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.