NFT
Overview
TokenID
2699
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Goblinland
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-16 */ // SPDX-License-Identifier: MIT /* .-'''-. ' _ \ .---. .---. _______ / /` '. \ /| | |.--. _..._ | | _..._ \ ___ `'. .--./). | \ ' || | ||__| .' '. | | .' '. ' |--.\ \ /.''\\ | ' | '|| | |.--.. .-. .| | . .-. . | | \ ' | | | |\ \ / / || __ | || || ' ' || | __ | ' ' | | | | ' \`-' / `. ` ..' / ||/'__ '. | || || | | || | .:--.'. | | | | | | | | /("'` '-...-'` |:/` '. '| || || | | || |/ | \ | | | | | | | ' .' \ '---. || | || || || | | || |`" __ | | | | | | | |___.' /' /'""'.\ ||\ / '| ||__|| | | || | .'.''| | | | | |/_______.'/ || || |/\'..' / '---' | | | |'---'/ / | |_| | | |\_______|/ \'. __// ' `'-'` | | | | \ \._,\ '/| | | | `'---' '--' '--' `--' `" '--' '--'//By Elfoly **/ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // 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: contracts/GoblinLand.sol /* .-'''-. ' _ \ .---. .---. _______ / /` '. \ /| | |.--. _..._ | | _..._ \ ___ `'. .--./). | \ ' || | ||__| .' '. | | .' '. ' |--.\ \ /.''\\ | ' | '|| | |.--.. .-. .| | . .-. . | | \ ' | | | |\ \ / / || __ | || || ' ' || | __ | ' ' | | | | ' \`-' / `. ` ..' / ||/'__ '. | || || | | || | .:--.'. | | | | | | | | /("'` '-...-'` |:/` '. '| || || | | || |/ | \ | | | | | | | ' .' \ '---. || | || || || | | || |`" __ | | | | | | | |___.' /' /'""'.\ ||\ / '| ||__|| | | || | .'.''| | | | | |/_______.'/ || || |/\'..' / '---' | | | |'---'/ / | |_| | | |\_______|/ \'. __// ' `'-'` | | | | \ \._,\ '/| | | | `'---' '--' '--' `--' `" '--' '--'//By Elfoly **/ pragma solidity >=0.7.0 <0.9.0; contract Goblinland is ERC721, ERC2981, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string public uriPrefix = "ipfs://bafybeidrsk65smnss6oqszbuwtzw2v2sywfiqgmad3xmcn23cuquihqypm/"; string public uriSuffix = ".json"; string public contractURI; uint256 public maxSupply = 5000; uint256 public maxMintAmountPerTx = 1; uint256 public maxMintAmountPerWallet = 1; string private Ps; mapping(address => uint256) public mintedWallets; bool public paused = true; constructor(uint96 _royaltyFeesInBips, string memory _contractURI, string memory _Ps) ERC721("Goblinland_wtf", "SMELLYLAND") { setRoyaltyInfo(msg.sender, _royaltyFeesInBips); contractURI = _contractURI; Ps = _Ps; } modifier mintCompliance(uint256 _mintAmount) { require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } function totalSupply() public view returns (uint256) { return supply.current(); } function mint(uint256 _mintAmount, string memory _address ) public payable mintCompliance(_mintAmount) { require(!paused, "Public mint is not open sucker!"); require((keccak256(abi.encodePacked(_address))) == (keccak256(abi.encodePacked(Ps))), "try from our website motherfucker!" ); require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Only one per wallet bitch!"); require(mintedWallets[msg.sender] < 1, "Only one per wallet bitch!"); mintedWallets[msg.sender]++; _mintLoop(msg.sender, _mintAmount); } function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } 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(), uriSuffix)) : ""; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function withdraw() public onlyOwner { // This will transfer the remaining contract balance to the owner. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC2981) returns (bool) { return super.supportsInterface(interfaceId); } function setRoyaltyInfo(address _receiver, uint96 _royaltyFeesInBips) public onlyOwner { _setDefaultRoyalty(_receiver, _royaltyFeesInBips); } function setContractURI(string calldata _contractURI) public onlyOwner { contractURI = _contractURI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint96","name":"_royaltyFeesInBips","type":"uint96"},{"internalType":"string","name":"_contractURI","type":"string"},{"internalType":"string","name":"_Ps","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerWallet","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":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"string","name":"_address","type":"string"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedWallets","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","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":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","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":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180608001604052806043815260200162004e2160439139600a9080519060200190620000359291906200054c565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b9080519060200190620000839291906200054c565b50611388600d556001600e556001600f556001601260006101000a81548160ff021916908315150217905550348015620000bc57600080fd5b5060405162004e6438038062004e648339818101604052810190620000e2919062000691565b6040518060400160405280600e81526020017f476f626c696e6c616e645f7774660000000000000000000000000000000000008152506040518060400160405280600a81526020017f534d454c4c594c414e44000000000000000000000000000000000000000000008152508160009080519060200190620001669291906200054c565b5080600190805190602001906200017f9291906200054c565b505050620001a262000196620001ef60201b60201c565b620001f760201b60201c565b620001b43384620002bd60201b60201c565b81600c9080519060200190620001cc9291906200054c565b508060109080519060200190620001e59291906200054c565b5050505062000a6e565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002cd620002e360201b60201c565b620002df82826200037460201b60201c565b5050565b620002f3620001ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003196200051860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000372576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036990620007a0565b60405180910390fd5b565b620003846200054260201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115620003e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003dc90620007c2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000458576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200044f90620007e4565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600660008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000612710905090565b8280546200055a90620008c4565b90600052602060002090601f0160209004810192826200057e5760008555620005ca565b82601f106200059957805160ff1916838001178555620005ca565b82800160010185558215620005ca579182015b82811115620005c9578251825591602001919060010190620005ac565b5b509050620005d99190620005dd565b5090565b5b80821115620005f8576000816000905550600101620005de565b5090565b6000620006136200060d846200082f565b62000806565b90508281526020810184848401111562000632576200063162000993565b5b6200063f8482856200088e565b509392505050565b600082601f8301126200065f576200065e6200098e565b5b815162000671848260208601620005fc565b91505092915050565b6000815190506200068b8162000a54565b92915050565b600080600060608486031215620006ad57620006ac6200099d565b5b6000620006bd868287016200067a565b935050602084015167ffffffffffffffff811115620006e157620006e062000998565b5b620006ef8682870162000647565b925050604084015167ffffffffffffffff81111562000713576200071262000998565b5b620007218682870162000647565b9150509250925092565b60006200073a60208362000865565b91506200074782620009b3565b602082019050919050565b600062000761602a8362000865565b91506200076e82620009dc565b604082019050919050565b60006200078860198362000865565b9150620007958262000a2b565b602082019050919050565b60006020820190508181036000830152620007bb816200072b565b9050919050565b60006020820190508181036000830152620007dd8162000752565b9050919050565b60006020820190508181036000830152620007ff8162000779565b9050919050565b60006200081262000825565b9050620008208282620008fa565b919050565b6000604051905090565b600067ffffffffffffffff8211156200084d576200084c6200095f565b5b6200085882620009a2565b9050602081019050919050565b600082825260208201905092915050565b60006bffffffffffffffffffffffff82169050919050565b60005b83811015620008ae57808201518184015260208101905062000891565b83811115620008be576000848401525b50505050565b60006002820490506001821680620008dd57607f821691505b60208210811415620008f457620008f362000930565b5b50919050565b6200090582620009a2565b810181811067ffffffffffffffff821117156200092757620009266200095f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b62000a5f8162000876565b811462000a6b57600080fd5b50565b6143a38062000a7e6000396000f3fe6080604052600436106102045760003560e01c8063715018a611610118578063b071401b116100a0578063d5abeb011161006f578063d5abeb0114610759578063e8a3d48514610784578063e985e9c5146107af578063efbd73f4146107ec578063f2fde38b1461081557610204565b8063b071401b1461069f578063b88d4fde146106c8578063bc951b91146106f1578063c87b56dd1461071c57610204565b8063938e3d7b116100e7578063938e3d7b146105ba57806394354fd0146105e357806395d89b411461060e578063a22cb46514610639578063ada7c4ed1461066257610204565b8063715018a61461053357806377097fc81461054a5780637ec4a659146105665780638da5cb5b1461058f57610204565b80632a55205a1161019b5780635503a0e81161016a5780635503a0e8146104385780635c975abb1461046357806362b99ad41461048e5780636352211e146104b957806370a08231146104f657610204565b80632a55205a1461037d5780633ccfd60b146103bb57806342842e0e146103d2578063438b6300146103fb57610204565b8063095ea7b3116101d7578063095ea7b3146102d757806316c38b3c1461030057806318160ddd1461032957806323b872dd1461035457610204565b806301ffc9a71461020957806302fa7c471461024657806306fdde031461026f578063081812fc1461029a575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612e7a565b61083e565b60405161023d919061364c565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612e0d565b610850565b005b34801561027b57600080fd5b50610284610866565b6040516102919190613667565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190612f6a565b6108f8565b6040516102ce919061359a565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f99190612dcd565b61093e565b005b34801561030c57600080fd5b5061032760048036038101906103229190612e4d565b610a56565b005b34801561033557600080fd5b5061033e610a7b565b60405161034b9190613909565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190612cb7565b610a8c565b005b34801561038957600080fd5b506103a4600480360381019061039f9190613033565b610aec565b6040516103b2929190613601565b60405180910390f35b3480156103c757600080fd5b506103d0610cd7565b005b3480156103de57600080fd5b506103f960048036038101906103f49190612cb7565b610d5f565b005b34801561040757600080fd5b50610422600480360381019061041d9190612c4a565b610d7f565b60405161042f919061362a565b60405180910390f35b34801561044457600080fd5b5061044d610e8a565b60405161045a9190613667565b60405180910390f35b34801561046f57600080fd5b50610478610f18565b604051610485919061364c565b60405180910390f35b34801561049a57600080fd5b506104a3610f2b565b6040516104b09190613667565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190612f6a565b610fb9565b6040516104ed919061359a565b60405180910390f35b34801561050257600080fd5b5061051d60048036038101906105189190612c4a565b61106b565b60405161052a9190613909565b60405180910390f35b34801561053f57600080fd5b50610548611123565b005b610564600480360381019061055f9190612fd7565b611137565b005b34801561057257600080fd5b5061058d60048036038101906105889190612f21565b6113a7565b005b34801561059b57600080fd5b506105a46113c9565b6040516105b1919061359a565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190612ed4565b6113f3565b005b3480156105ef57600080fd5b506105f8611411565b6040516106059190613909565b60405180910390f35b34801561061a57600080fd5b50610623611417565b6040516106309190613667565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190612d8d565b6114a9565b005b34801561066e57600080fd5b5061068960048036038101906106849190612c4a565b6114bf565b6040516106969190613909565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190612f6a565b6114d7565b005b3480156106d457600080fd5b506106ef60048036038101906106ea9190612d0a565b6114e9565b005b3480156106fd57600080fd5b5061070661154b565b6040516107139190613909565b60405180910390f35b34801561072857600080fd5b50610743600480360381019061073e9190612f6a565b611551565b6040516107509190613667565b60405180910390f35b34801561076557600080fd5b5061076e6115fb565b60405161077b9190613909565b60405180910390f35b34801561079057600080fd5b50610799611601565b6040516107a69190613667565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d19190612c77565b61168f565b6040516107e3919061364c565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e9190612f97565b611723565b005b34801561082157600080fd5b5061083c60048036038101906108379190612c4a565b611794565b005b600061084982611818565b9050919050565b610858611892565b6108628282611910565b5050565b60606000805461087590613c2a565b80601f01602080910402602001604051908101604052809291908181526020018280546108a190613c2a565b80156108ee5780601f106108c3576101008083540402835291602001916108ee565b820191906000526020600020905b8154815290600101906020018083116108d157829003601f168201915b5050505050905090565b600061090382611aa6565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061094982610fb9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b190613849565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109d9611af1565b73ffffffffffffffffffffffffffffffffffffffff161480610a085750610a0781610a02611af1565b61168f565b5b610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e906137a9565b60405180910390fd5b610a518383611af9565b505050565b610a5e611892565b80601260006101000a81548160ff02191690831515021790555050565b6000610a876009611bb2565b905090565b610a9d610a97611af1565b82611bc0565b610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad3906138a9565b60405180910390fd5b610ae7838383611c55565b505050565b6000806000600760008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161415610c825760066040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610c8c611ebc565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610cb89190613ace565b610cc29190613a9d565b90508160000151819350935050509250929050565b610cdf611892565b6000610ce96113c9565b73ffffffffffffffffffffffffffffffffffffffff1647604051610d0c90613585565b60006040518083038185875af1925050503d8060008114610d49576040519150601f19603f3d011682016040523d82523d6000602084013e610d4e565b606091505b5050905080610d5c57600080fd5b50565b610d7a838383604051806020016040528060008152506114e9565b505050565b60606000610d8c8361106b565b905060008167ffffffffffffffff811115610daa57610da9613dc3565b5b604051908082528060200260200182016040528015610dd85781602001602082028036833780820191505090505b50905060006001905060005b8381108015610df55750600d548211155b15610e7e576000610e0583610fb9565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e6a5782848381518110610e4f57610e4e613d94565b5b6020026020010181815250508180610e6690613c8d565b9250505b8280610e7590613c8d565b93505050610de4565b82945050505050919050565b600b8054610e9790613c2a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec390613c2a565b8015610f105780601f10610ee557610100808354040283529160200191610f10565b820191906000526020600020905b815481529060010190602001808311610ef357829003601f168201915b505050505081565b601260009054906101000a900460ff1681565b600a8054610f3890613c2a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6490613c2a565b8015610fb15780601f10610f8657610100808354040283529160200191610fb1565b820191906000526020600020905b815481529060010190602001808311610f9457829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105990613829565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d390613769565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61112b611892565b6111356000611ec6565b565b81600d54816111466009611bb2565b6111509190613a47565b1115611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890613869565b60405180910390fd5b601260009054906101000a900460ff16156111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d8906138e9565b60405180910390fd5b60106040516020016111f3919061356e565b604051602081830303815290604052805190602001208260405160200161121a9190613526565b6040516020818303038152906040528051906020012014611270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126790613689565b60405180910390fd5b6000831180156112825750600e548311155b6112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b890613789565b60405180910390fd5b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a90613789565b60405180910390fd5b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061139390613c8d565b91905055506113a23384611f8c565b505050565b6113af611892565b80600a90805190602001906113c592919061296d565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113fb611892565b8181600c919061140c9291906129f3565b505050565b600e5481565b60606001805461142690613c2a565b80601f016020809104026020016040519081016040528092919081815260200182805461145290613c2a565b801561149f5780601f106114745761010080835404028352916020019161149f565b820191906000526020600020905b81548152906001019060200180831161148257829003601f168201915b5050505050905090565b6114bb6114b4611af1565b8383611fcc565b5050565b60116020528060005260406000206000915090505481565b6114df611892565b80600e8190555050565b6114fa6114f4611af1565b83611bc0565b611539576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611530906138a9565b60405180910390fd5b61154584848484612139565b50505050565b600f5481565b606061155c82612195565b61159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159290613809565b60405180910390fd5b60006115a5612201565b905060008151116115c557604051806020016040528060008152506115f3565b806115cf84612293565b600b6040516020016115e39392919061353d565b6040516020818303038152906040525b915050919050565b600d5481565b600c805461160e90613c2a565b80601f016020809104026020016040519081016040528092919081815260200182805461163a90613c2a565b80156116875780601f1061165c57610100808354040283529160200191611687565b820191906000526020600020905b81548152906001019060200180831161166a57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81600d54816117326009611bb2565b61173c9190613a47565b111561177d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177490613869565b60405180910390fd5b611785611892565b61178f8284611f8c565b505050565b61179c611892565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561180c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611803906136c9565b60405180910390fd5b61181581611ec6565b50565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061188b575061188a826123f4565b5b9050919050565b61189a611af1565b73ffffffffffffffffffffffffffffffffffffffff166118b86113c9565b73ffffffffffffffffffffffffffffffffffffffff161461190e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611905906137e9565b60405180910390fd5b565b611918611ebc565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d90613889565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd906138c9565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600660008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b611aaf81612195565b611aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae590613829565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b6c83610fb9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600080611bcc83610fb9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c0e5750611c0d818561168f565b5b80611c4c57508373ffffffffffffffffffffffffffffffffffffffff16611c34846108f8565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c7582610fb9565b73ffffffffffffffffffffffffffffffffffffffff1614611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc2906136e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3290613729565b60405180910390fd5b611d468383836124d6565b611d51600082611af9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611da19190613b28565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611df89190613a47565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611eb78383836124db565b505050565b6000612710905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015611fc757611fa160096124e0565b611fb483611faf6009611bb2565b6124f6565b8080611fbf90613c8d565b915050611f8f565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203290613749565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161212c919061364c565b60405180910390a3505050565b612144848484611c55565b61215084848484612514565b61218f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612186906136a9565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600a805461221090613c2a565b80601f016020809104026020016040519081016040528092919081815260200182805461223c90613c2a565b80156122895780601f1061225e57610100808354040283529160200191612289565b820191906000526020600020905b81548152906001019060200180831161226c57829003601f168201915b5050505050905090565b606060008214156122db576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123ef565b600082905060005b6000821461230d5780806122f690613c8d565b915050600a826123069190613a9d565b91506122e3565b60008167ffffffffffffffff81111561232957612328613dc3565b5b6040519080825280601f01601f19166020018201604052801561235b5781602001600182028036833780820191505090505b5090505b600085146123e8576001826123749190613b28565b9150600a856123839190613cd6565b603061238f9190613a47565b60f81b8183815181106123a5576123a4613d94565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123e19190613a9d565b945061235f565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124bf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124cf57506124ce826126ab565b5b9050919050565b505050565b505050565b6001816000016000828254019250508190555050565b612510828260405180602001604052806000815250612715565b5050565b60006125358473ffffffffffffffffffffffffffffffffffffffff16612770565b1561269e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261255e611af1565b8786866040518563ffffffff1660e01b815260040161258094939291906135b5565b602060405180830381600087803b15801561259a57600080fd5b505af19250505080156125cb57506040513d601f19601f820116820180604052508101906125c89190612ea7565b60015b61264e573d80600081146125fb576040519150601f19603f3d011682016040523d82523d6000602084013e612600565b606091505b50600081511415612646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263d906136a9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126a3565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61271f8383612793565b61272c6000848484612514565b61276b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612762906136a9565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fa906137c9565b60405180910390fd5b61280c81612195565b1561284c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284390613709565b60405180910390fd5b612858600083836124d6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128a89190613a47565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612969600083836124db565b5050565b82805461297990613c2a565b90600052602060002090601f01602090048101928261299b57600085556129e2565b82601f106129b457805160ff19168380011785556129e2565b828001600101855582156129e2579182015b828111156129e15782518255916020019190600101906129c6565b5b5090506129ef9190612a79565b5090565b8280546129ff90613c2a565b90600052602060002090601f016020900481019282612a215760008555612a68565b82601f10612a3a57803560ff1916838001178555612a68565b82800160010185558215612a68579182015b82811115612a67578235825591602001919060010190612a4c565b5b509050612a759190612a79565b5090565b5b80821115612a92576000816000905550600101612a7a565b5090565b6000612aa9612aa484613949565b613924565b905082815260208101848484011115612ac557612ac4613e01565b5b612ad0848285613be8565b509392505050565b6000612aeb612ae68461397a565b613924565b905082815260208101848484011115612b0757612b06613e01565b5b612b12848285613be8565b509392505050565b600081359050612b29816142fa565b92915050565b600081359050612b3e81614311565b92915050565b600081359050612b5381614328565b92915050565b600081519050612b6881614328565b92915050565b600082601f830112612b8357612b82613df7565b5b8135612b93848260208601612a96565b91505092915050565b60008083601f840112612bb257612bb1613df7565b5b8235905067ffffffffffffffff811115612bcf57612bce613df2565b5b602083019150836001820283011115612beb57612bea613dfc565b5b9250929050565b600082601f830112612c0757612c06613df7565b5b8135612c17848260208601612ad8565b91505092915050565b600081359050612c2f8161433f565b92915050565b600081359050612c4481614356565b92915050565b600060208284031215612c6057612c5f613e0b565b5b6000612c6e84828501612b1a565b91505092915050565b60008060408385031215612c8e57612c8d613e0b565b5b6000612c9c85828601612b1a565b9250506020612cad85828601612b1a565b9150509250929050565b600080600060608486031215612cd057612ccf613e0b565b5b6000612cde86828701612b1a565b9350506020612cef86828701612b1a565b9250506040612d0086828701612c20565b9150509250925092565b60008060008060808587031215612d2457612d23613e0b565b5b6000612d3287828801612b1a565b9450506020612d4387828801612b1a565b9350506040612d5487828801612c20565b925050606085013567ffffffffffffffff811115612d7557612d74613e06565b5b612d8187828801612b6e565b91505092959194509250565b60008060408385031215612da457612da3613e0b565b5b6000612db285828601612b1a565b9250506020612dc385828601612b2f565b9150509250929050565b60008060408385031215612de457612de3613e0b565b5b6000612df285828601612b1a565b9250506020612e0385828601612c20565b9150509250929050565b60008060408385031215612e2457612e23613e0b565b5b6000612e3285828601612b1a565b9250506020612e4385828601612c35565b9150509250929050565b600060208284031215612e6357612e62613e0b565b5b6000612e7184828501612b2f565b91505092915050565b600060208284031215612e9057612e8f613e0b565b5b6000612e9e84828501612b44565b91505092915050565b600060208284031215612ebd57612ebc613e0b565b5b6000612ecb84828501612b59565b91505092915050565b60008060208385031215612eeb57612eea613e0b565b5b600083013567ffffffffffffffff811115612f0957612f08613e06565b5b612f1585828601612b9c565b92509250509250929050565b600060208284031215612f3757612f36613e0b565b5b600082013567ffffffffffffffff811115612f5557612f54613e06565b5b612f6184828501612bf2565b91505092915050565b600060208284031215612f8057612f7f613e0b565b5b6000612f8e84828501612c20565b91505092915050565b60008060408385031215612fae57612fad613e0b565b5b6000612fbc85828601612c20565b9250506020612fcd85828601612b1a565b9150509250929050565b60008060408385031215612fee57612fed613e0b565b5b6000612ffc85828601612c20565b925050602083013567ffffffffffffffff81111561301d5761301c613e06565b5b61302985828601612bf2565b9150509250929050565b6000806040838503121561304a57613049613e0b565b5b600061305885828601612c20565b925050602061306985828601612c20565b9150509250929050565b600061307f8383613508565b60208301905092915050565b61309481613b5c565b82525050565b60006130a5826139d0565b6130af81856139fe565b93506130ba836139ab565b8060005b838110156130eb5781516130d28882613073565b97506130dd836139f1565b9250506001810190506130be565b5085935050505092915050565b61310181613b6e565b82525050565b6000613112826139db565b61311c8185613a0f565b935061312c818560208601613bf7565b61313581613e10565b840191505092915050565b600061314b826139e6565b6131558185613a2b565b9350613165818560208601613bf7565b61316e81613e10565b840191505092915050565b6000613184826139e6565b61318e8185613a3c565b935061319e818560208601613bf7565b80840191505092915050565b600081546131b781613c2a565b6131c18186613a3c565b945060018216600081146131dc57600181146131ed57613220565b60ff19831686528186019350613220565b6131f6856139bb565b60005b83811015613218578154818901526001820191506020810190506131f9565b838801955050505b50505092915050565b6000613236602283613a2b565b915061324182613e21565b604082019050919050565b6000613259603283613a2b565b915061326482613e70565b604082019050919050565b600061327c602683613a2b565b915061328782613ebf565b604082019050919050565b600061329f602583613a2b565b91506132aa82613f0e565b604082019050919050565b60006132c2601c83613a2b565b91506132cd82613f5d565b602082019050919050565b60006132e5602483613a2b565b91506132f082613f86565b604082019050919050565b6000613308601983613a2b565b915061331382613fd5565b602082019050919050565b600061332b602983613a2b565b915061333682613ffe565b604082019050919050565b600061334e601a83613a2b565b91506133598261404d565b602082019050919050565b6000613371603e83613a2b565b915061337c82614076565b604082019050919050565b6000613394602083613a2b565b915061339f826140c5565b602082019050919050565b60006133b7602083613a2b565b91506133c2826140ee565b602082019050919050565b60006133da602f83613a2b565b91506133e582614117565b604082019050919050565b60006133fd601883613a2b565b915061340882614166565b602082019050919050565b6000613420602183613a2b565b915061342b8261418f565b604082019050919050565b6000613443600083613a20565b915061344e826141de565b600082019050919050565b6000613466601483613a2b565b9150613471826141e1565b602082019050919050565b6000613489602a83613a2b565b91506134948261420a565b604082019050919050565b60006134ac602e83613a2b565b91506134b782614259565b604082019050919050565b60006134cf601983613a2b565b91506134da826142a8565b602082019050919050565b60006134f2601f83613a2b565b91506134fd826142d1565b602082019050919050565b61351181613bc6565b82525050565b61352081613bc6565b82525050565b60006135328284613179565b915081905092915050565b60006135498286613179565b91506135558285613179565b915061356182846131aa565b9150819050949350505050565b600061357a82846131aa565b915081905092915050565b600061359082613436565b9150819050919050565b60006020820190506135af600083018461308b565b92915050565b60006080820190506135ca600083018761308b565b6135d7602083018661308b565b6135e46040830185613517565b81810360608301526135f68184613107565b905095945050505050565b6000604082019050613616600083018561308b565b6136236020830184613517565b9392505050565b60006020820190508181036000830152613644818461309a565b905092915050565b600060208201905061366160008301846130f8565b92915050565b600060208201905081810360008301526136818184613140565b905092915050565b600060208201905081810360008301526136a281613229565b9050919050565b600060208201905081810360008301526136c28161324c565b9050919050565b600060208201905081810360008301526136e28161326f565b9050919050565b6000602082019050818103600083015261370281613292565b9050919050565b60006020820190508181036000830152613722816132b5565b9050919050565b60006020820190508181036000830152613742816132d8565b9050919050565b60006020820190508181036000830152613762816132fb565b9050919050565b600060208201905081810360008301526137828161331e565b9050919050565b600060208201905081810360008301526137a281613341565b9050919050565b600060208201905081810360008301526137c281613364565b9050919050565b600060208201905081810360008301526137e281613387565b9050919050565b60006020820190508181036000830152613802816133aa565b9050919050565b60006020820190508181036000830152613822816133cd565b9050919050565b60006020820190508181036000830152613842816133f0565b9050919050565b6000602082019050818103600083015261386281613413565b9050919050565b6000602082019050818103600083015261388281613459565b9050919050565b600060208201905081810360008301526138a28161347c565b9050919050565b600060208201905081810360008301526138c28161349f565b9050919050565b600060208201905081810360008301526138e2816134c2565b9050919050565b60006020820190508181036000830152613902816134e5565b9050919050565b600060208201905061391e6000830184613517565b92915050565b600061392e61393f565b905061393a8282613c5c565b919050565b6000604051905090565b600067ffffffffffffffff82111561396457613963613dc3565b5b61396d82613e10565b9050602081019050919050565b600067ffffffffffffffff82111561399557613994613dc3565b5b61399e82613e10565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a5282613bc6565b9150613a5d83613bc6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a9257613a91613d07565b5b828201905092915050565b6000613aa882613bc6565b9150613ab383613bc6565b925082613ac357613ac2613d36565b5b828204905092915050565b6000613ad982613bc6565b9150613ae483613bc6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b1d57613b1c613d07565b5b828202905092915050565b6000613b3382613bc6565b9150613b3e83613bc6565b925082821015613b5157613b50613d07565b5b828203905092915050565b6000613b6782613ba6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015613c15578082015181840152602081019050613bfa565b83811115613c24576000848401525b50505050565b60006002820490506001821680613c4257607f821691505b60208210811415613c5657613c55613d65565b5b50919050565b613c6582613e10565b810181811067ffffffffffffffff82111715613c8457613c83613dc3565b5b80604052505050565b6000613c9882613bc6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ccb57613cca613d07565b5b600182019050919050565b6000613ce182613bc6565b9150613cec83613bc6565b925082613cfc57613cfb613d36565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f7472792066726f6d206f75722077656273697465206d6f746865726675636b6560008201527f7221000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f6e65207065722077616c6c657420626974636821000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b7f5075626c6963206d696e74206973206e6f74206f70656e207375636b65722100600082015250565b61430381613b5c565b811461430e57600080fd5b50565b61431a81613b6e565b811461432557600080fd5b50565b61433181613b7a565b811461433c57600080fd5b50565b61434881613bc6565b811461435357600080fd5b50565b61435f81613bd0565b811461436a57600080fd5b5056fea2646970667358221220a2cefa613e35962cbbfbc17508a63341d8fa79d55f9d30cda4bc6fd8863b948264736f6c63430008070033697066733a2f2f626166796265696472736b3635736d6e7373366f71737a627577747a77327632737977666971676d616433786d636e32336375717569687179706d2f00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006668747470733a2f2f6261667962656961796d77336b37657072376f79676c6c6c6d33367579637377336f6a7768636e377a7a787372756435336865786a786a336a6c752e697066732e6e667473746f726167652e6c696e6b2f6d657461646174612e6a736f6e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000294966494c69737442656c6f77546865466c6f6f724d794d756d5375636b73476f626c696e734469636b0000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102045760003560e01c8063715018a611610118578063b071401b116100a0578063d5abeb011161006f578063d5abeb0114610759578063e8a3d48514610784578063e985e9c5146107af578063efbd73f4146107ec578063f2fde38b1461081557610204565b8063b071401b1461069f578063b88d4fde146106c8578063bc951b91146106f1578063c87b56dd1461071c57610204565b8063938e3d7b116100e7578063938e3d7b146105ba57806394354fd0146105e357806395d89b411461060e578063a22cb46514610639578063ada7c4ed1461066257610204565b8063715018a61461053357806377097fc81461054a5780637ec4a659146105665780638da5cb5b1461058f57610204565b80632a55205a1161019b5780635503a0e81161016a5780635503a0e8146104385780635c975abb1461046357806362b99ad41461048e5780636352211e146104b957806370a08231146104f657610204565b80632a55205a1461037d5780633ccfd60b146103bb57806342842e0e146103d2578063438b6300146103fb57610204565b8063095ea7b3116101d7578063095ea7b3146102d757806316c38b3c1461030057806318160ddd1461032957806323b872dd1461035457610204565b806301ffc9a71461020957806302fa7c471461024657806306fdde031461026f578063081812fc1461029a575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612e7a565b61083e565b60405161023d919061364c565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612e0d565b610850565b005b34801561027b57600080fd5b50610284610866565b6040516102919190613667565b60405180910390f35b3480156102a657600080fd5b506102c160048036038101906102bc9190612f6a565b6108f8565b6040516102ce919061359a565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f99190612dcd565b61093e565b005b34801561030c57600080fd5b5061032760048036038101906103229190612e4d565b610a56565b005b34801561033557600080fd5b5061033e610a7b565b60405161034b9190613909565b60405180910390f35b34801561036057600080fd5b5061037b60048036038101906103769190612cb7565b610a8c565b005b34801561038957600080fd5b506103a4600480360381019061039f9190613033565b610aec565b6040516103b2929190613601565b60405180910390f35b3480156103c757600080fd5b506103d0610cd7565b005b3480156103de57600080fd5b506103f960048036038101906103f49190612cb7565b610d5f565b005b34801561040757600080fd5b50610422600480360381019061041d9190612c4a565b610d7f565b60405161042f919061362a565b60405180910390f35b34801561044457600080fd5b5061044d610e8a565b60405161045a9190613667565b60405180910390f35b34801561046f57600080fd5b50610478610f18565b604051610485919061364c565b60405180910390f35b34801561049a57600080fd5b506104a3610f2b565b6040516104b09190613667565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190612f6a565b610fb9565b6040516104ed919061359a565b60405180910390f35b34801561050257600080fd5b5061051d60048036038101906105189190612c4a565b61106b565b60405161052a9190613909565b60405180910390f35b34801561053f57600080fd5b50610548611123565b005b610564600480360381019061055f9190612fd7565b611137565b005b34801561057257600080fd5b5061058d60048036038101906105889190612f21565b6113a7565b005b34801561059b57600080fd5b506105a46113c9565b6040516105b1919061359a565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190612ed4565b6113f3565b005b3480156105ef57600080fd5b506105f8611411565b6040516106059190613909565b60405180910390f35b34801561061a57600080fd5b50610623611417565b6040516106309190613667565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190612d8d565b6114a9565b005b34801561066e57600080fd5b5061068960048036038101906106849190612c4a565b6114bf565b6040516106969190613909565b60405180910390f35b3480156106ab57600080fd5b506106c660048036038101906106c19190612f6a565b6114d7565b005b3480156106d457600080fd5b506106ef60048036038101906106ea9190612d0a565b6114e9565b005b3480156106fd57600080fd5b5061070661154b565b6040516107139190613909565b60405180910390f35b34801561072857600080fd5b50610743600480360381019061073e9190612f6a565b611551565b6040516107509190613667565b60405180910390f35b34801561076557600080fd5b5061076e6115fb565b60405161077b9190613909565b60405180910390f35b34801561079057600080fd5b50610799611601565b6040516107a69190613667565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d19190612c77565b61168f565b6040516107e3919061364c565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e9190612f97565b611723565b005b34801561082157600080fd5b5061083c60048036038101906108379190612c4a565b611794565b005b600061084982611818565b9050919050565b610858611892565b6108628282611910565b5050565b60606000805461087590613c2a565b80601f01602080910402602001604051908101604052809291908181526020018280546108a190613c2a565b80156108ee5780601f106108c3576101008083540402835291602001916108ee565b820191906000526020600020905b8154815290600101906020018083116108d157829003601f168201915b5050505050905090565b600061090382611aa6565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061094982610fb9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b190613849565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109d9611af1565b73ffffffffffffffffffffffffffffffffffffffff161480610a085750610a0781610a02611af1565b61168f565b5b610a47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3e906137a9565b60405180910390fd5b610a518383611af9565b505050565b610a5e611892565b80601260006101000a81548160ff02191690831515021790555050565b6000610a876009611bb2565b905090565b610a9d610a97611af1565b82611bc0565b610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad3906138a9565b60405180910390fd5b610ae7838383611c55565b505050565b6000806000600760008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161415610c825760066040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610c8c611ebc565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610cb89190613ace565b610cc29190613a9d565b90508160000151819350935050509250929050565b610cdf611892565b6000610ce96113c9565b73ffffffffffffffffffffffffffffffffffffffff1647604051610d0c90613585565b60006040518083038185875af1925050503d8060008114610d49576040519150601f19603f3d011682016040523d82523d6000602084013e610d4e565b606091505b5050905080610d5c57600080fd5b50565b610d7a838383604051806020016040528060008152506114e9565b505050565b60606000610d8c8361106b565b905060008167ffffffffffffffff811115610daa57610da9613dc3565b5b604051908082528060200260200182016040528015610dd85781602001602082028036833780820191505090505b50905060006001905060005b8381108015610df55750600d548211155b15610e7e576000610e0583610fb9565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e6a5782848381518110610e4f57610e4e613d94565b5b6020026020010181815250508180610e6690613c8d565b9250505b8280610e7590613c8d565b93505050610de4565b82945050505050919050565b600b8054610e9790613c2a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec390613c2a565b8015610f105780601f10610ee557610100808354040283529160200191610f10565b820191906000526020600020905b815481529060010190602001808311610ef357829003601f168201915b505050505081565b601260009054906101000a900460ff1681565b600a8054610f3890613c2a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6490613c2a565b8015610fb15780601f10610f8657610100808354040283529160200191610fb1565b820191906000526020600020905b815481529060010190602001808311610f9457829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105990613829565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d390613769565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61112b611892565b6111356000611ec6565b565b81600d54816111466009611bb2565b6111509190613a47565b1115611191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118890613869565b60405180910390fd5b601260009054906101000a900460ff16156111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d8906138e9565b60405180910390fd5b60106040516020016111f3919061356e565b604051602081830303815290604052805190602001208260405160200161121a9190613526565b6040516020818303038152906040528051906020012014611270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126790613689565b60405180910390fd5b6000831180156112825750600e548311155b6112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b890613789565b60405180910390fd5b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133a90613789565b60405180910390fd5b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061139390613c8d565b91905055506113a23384611f8c565b505050565b6113af611892565b80600a90805190602001906113c592919061296d565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113fb611892565b8181600c919061140c9291906129f3565b505050565b600e5481565b60606001805461142690613c2a565b80601f016020809104026020016040519081016040528092919081815260200182805461145290613c2a565b801561149f5780601f106114745761010080835404028352916020019161149f565b820191906000526020600020905b81548152906001019060200180831161148257829003601f168201915b5050505050905090565b6114bb6114b4611af1565b8383611fcc565b5050565b60116020528060005260406000206000915090505481565b6114df611892565b80600e8190555050565b6114fa6114f4611af1565b83611bc0565b611539576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611530906138a9565b60405180910390fd5b61154584848484612139565b50505050565b600f5481565b606061155c82612195565b61159b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159290613809565b60405180910390fd5b60006115a5612201565b905060008151116115c557604051806020016040528060008152506115f3565b806115cf84612293565b600b6040516020016115e39392919061353d565b6040516020818303038152906040525b915050919050565b600d5481565b600c805461160e90613c2a565b80601f016020809104026020016040519081016040528092919081815260200182805461163a90613c2a565b80156116875780601f1061165c57610100808354040283529160200191611687565b820191906000526020600020905b81548152906001019060200180831161166a57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b81600d54816117326009611bb2565b61173c9190613a47565b111561177d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177490613869565b60405180910390fd5b611785611892565b61178f8284611f8c565b505050565b61179c611892565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561180c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611803906136c9565b60405180910390fd5b61181581611ec6565b50565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061188b575061188a826123f4565b5b9050919050565b61189a611af1565b73ffffffffffffffffffffffffffffffffffffffff166118b86113c9565b73ffffffffffffffffffffffffffffffffffffffff161461190e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611905906137e9565b60405180910390fd5b565b611918611ebc565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d90613889565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd906138c9565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600660008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b611aaf81612195565b611aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae590613829565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b6c83610fb9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600080611bcc83610fb9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c0e5750611c0d818561168f565b5b80611c4c57508373ffffffffffffffffffffffffffffffffffffffff16611c34846108f8565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c7582610fb9565b73ffffffffffffffffffffffffffffffffffffffff1614611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc2906136e9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3290613729565b60405180910390fd5b611d468383836124d6565b611d51600082611af9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611da19190613b28565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611df89190613a47565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611eb78383836124db565b505050565b6000612710905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b81811015611fc757611fa160096124e0565b611fb483611faf6009611bb2565b6124f6565b8080611fbf90613c8d565b915050611f8f565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203290613749565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161212c919061364c565b60405180910390a3505050565b612144848484611c55565b61215084848484612514565b61218f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612186906136a9565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600a805461221090613c2a565b80601f016020809104026020016040519081016040528092919081815260200182805461223c90613c2a565b80156122895780601f1061225e57610100808354040283529160200191612289565b820191906000526020600020905b81548152906001019060200180831161226c57829003601f168201915b5050505050905090565b606060008214156122db576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123ef565b600082905060005b6000821461230d5780806122f690613c8d565b915050600a826123069190613a9d565b91506122e3565b60008167ffffffffffffffff81111561232957612328613dc3565b5b6040519080825280601f01601f19166020018201604052801561235b5781602001600182028036833780820191505090505b5090505b600085146123e8576001826123749190613b28565b9150600a856123839190613cd6565b603061238f9190613a47565b60f81b8183815181106123a5576123a4613d94565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123e19190613a9d565b945061235f565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124bf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124cf57506124ce826126ab565b5b9050919050565b505050565b505050565b6001816000016000828254019250508190555050565b612510828260405180602001604052806000815250612715565b5050565b60006125358473ffffffffffffffffffffffffffffffffffffffff16612770565b1561269e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261255e611af1565b8786866040518563ffffffff1660e01b815260040161258094939291906135b5565b602060405180830381600087803b15801561259a57600080fd5b505af19250505080156125cb57506040513d601f19601f820116820180604052508101906125c89190612ea7565b60015b61264e573d80600081146125fb576040519150601f19603f3d011682016040523d82523d6000602084013e612600565b606091505b50600081511415612646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263d906136a9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126a3565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61271f8383612793565b61272c6000848484612514565b61276b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612762906136a9565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612803576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fa906137c9565b60405180910390fd5b61280c81612195565b1561284c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284390613709565b60405180910390fd5b612858600083836124d6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128a89190613a47565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612969600083836124db565b5050565b82805461297990613c2a565b90600052602060002090601f01602090048101928261299b57600085556129e2565b82601f106129b457805160ff19168380011785556129e2565b828001600101855582156129e2579182015b828111156129e15782518255916020019190600101906129c6565b5b5090506129ef9190612a79565b5090565b8280546129ff90613c2a565b90600052602060002090601f016020900481019282612a215760008555612a68565b82601f10612a3a57803560ff1916838001178555612a68565b82800160010185558215612a68579182015b82811115612a67578235825591602001919060010190612a4c565b5b509050612a759190612a79565b5090565b5b80821115612a92576000816000905550600101612a7a565b5090565b6000612aa9612aa484613949565b613924565b905082815260208101848484011115612ac557612ac4613e01565b5b612ad0848285613be8565b509392505050565b6000612aeb612ae68461397a565b613924565b905082815260208101848484011115612b0757612b06613e01565b5b612b12848285613be8565b509392505050565b600081359050612b29816142fa565b92915050565b600081359050612b3e81614311565b92915050565b600081359050612b5381614328565b92915050565b600081519050612b6881614328565b92915050565b600082601f830112612b8357612b82613df7565b5b8135612b93848260208601612a96565b91505092915050565b60008083601f840112612bb257612bb1613df7565b5b8235905067ffffffffffffffff811115612bcf57612bce613df2565b5b602083019150836001820283011115612beb57612bea613dfc565b5b9250929050565b600082601f830112612c0757612c06613df7565b5b8135612c17848260208601612ad8565b91505092915050565b600081359050612c2f8161433f565b92915050565b600081359050612c4481614356565b92915050565b600060208284031215612c6057612c5f613e0b565b5b6000612c6e84828501612b1a565b91505092915050565b60008060408385031215612c8e57612c8d613e0b565b5b6000612c9c85828601612b1a565b9250506020612cad85828601612b1a565b9150509250929050565b600080600060608486031215612cd057612ccf613e0b565b5b6000612cde86828701612b1a565b9350506020612cef86828701612b1a565b9250506040612d0086828701612c20565b9150509250925092565b60008060008060808587031215612d2457612d23613e0b565b5b6000612d3287828801612b1a565b9450506020612d4387828801612b1a565b9350506040612d5487828801612c20565b925050606085013567ffffffffffffffff811115612d7557612d74613e06565b5b612d8187828801612b6e565b91505092959194509250565b60008060408385031215612da457612da3613e0b565b5b6000612db285828601612b1a565b9250506020612dc385828601612b2f565b9150509250929050565b60008060408385031215612de457612de3613e0b565b5b6000612df285828601612b1a565b9250506020612e0385828601612c20565b9150509250929050565b60008060408385031215612e2457612e23613e0b565b5b6000612e3285828601612b1a565b9250506020612e4385828601612c35565b9150509250929050565b600060208284031215612e6357612e62613e0b565b5b6000612e7184828501612b2f565b91505092915050565b600060208284031215612e9057612e8f613e0b565b5b6000612e9e84828501612b44565b91505092915050565b600060208284031215612ebd57612ebc613e0b565b5b6000612ecb84828501612b59565b91505092915050565b60008060208385031215612eeb57612eea613e0b565b5b600083013567ffffffffffffffff811115612f0957612f08613e06565b5b612f1585828601612b9c565b92509250509250929050565b600060208284031215612f3757612f36613e0b565b5b600082013567ffffffffffffffff811115612f5557612f54613e06565b5b612f6184828501612bf2565b91505092915050565b600060208284031215612f8057612f7f613e0b565b5b6000612f8e84828501612c20565b91505092915050565b60008060408385031215612fae57612fad613e0b565b5b6000612fbc85828601612c20565b9250506020612fcd85828601612b1a565b9150509250929050565b60008060408385031215612fee57612fed613e0b565b5b6000612ffc85828601612c20565b925050602083013567ffffffffffffffff81111561301d5761301c613e06565b5b61302985828601612bf2565b9150509250929050565b6000806040838503121561304a57613049613e0b565b5b600061305885828601612c20565b925050602061306985828601612c20565b9150509250929050565b600061307f8383613508565b60208301905092915050565b61309481613b5c565b82525050565b60006130a5826139d0565b6130af81856139fe565b93506130ba836139ab565b8060005b838110156130eb5781516130d28882613073565b97506130dd836139f1565b9250506001810190506130be565b5085935050505092915050565b61310181613b6e565b82525050565b6000613112826139db565b61311c8185613a0f565b935061312c818560208601613bf7565b61313581613e10565b840191505092915050565b600061314b826139e6565b6131558185613a2b565b9350613165818560208601613bf7565b61316e81613e10565b840191505092915050565b6000613184826139e6565b61318e8185613a3c565b935061319e818560208601613bf7565b80840191505092915050565b600081546131b781613c2a565b6131c18186613a3c565b945060018216600081146131dc57600181146131ed57613220565b60ff19831686528186019350613220565b6131f6856139bb565b60005b83811015613218578154818901526001820191506020810190506131f9565b838801955050505b50505092915050565b6000613236602283613a2b565b915061324182613e21565b604082019050919050565b6000613259603283613a2b565b915061326482613e70565b604082019050919050565b600061327c602683613a2b565b915061328782613ebf565b604082019050919050565b600061329f602583613a2b565b91506132aa82613f0e565b604082019050919050565b60006132c2601c83613a2b565b91506132cd82613f5d565b602082019050919050565b60006132e5602483613a2b565b91506132f082613f86565b604082019050919050565b6000613308601983613a2b565b915061331382613fd5565b602082019050919050565b600061332b602983613a2b565b915061333682613ffe565b604082019050919050565b600061334e601a83613a2b565b91506133598261404d565b602082019050919050565b6000613371603e83613a2b565b915061337c82614076565b604082019050919050565b6000613394602083613a2b565b915061339f826140c5565b602082019050919050565b60006133b7602083613a2b565b91506133c2826140ee565b602082019050919050565b60006133da602f83613a2b565b91506133e582614117565b604082019050919050565b60006133fd601883613a2b565b915061340882614166565b602082019050919050565b6000613420602183613a2b565b915061342b8261418f565b604082019050919050565b6000613443600083613a20565b915061344e826141de565b600082019050919050565b6000613466601483613a2b565b9150613471826141e1565b602082019050919050565b6000613489602a83613a2b565b91506134948261420a565b604082019050919050565b60006134ac602e83613a2b565b91506134b782614259565b604082019050919050565b60006134cf601983613a2b565b91506134da826142a8565b602082019050919050565b60006134f2601f83613a2b565b91506134fd826142d1565b602082019050919050565b61351181613bc6565b82525050565b61352081613bc6565b82525050565b60006135328284613179565b915081905092915050565b60006135498286613179565b91506135558285613179565b915061356182846131aa565b9150819050949350505050565b600061357a82846131aa565b915081905092915050565b600061359082613436565b9150819050919050565b60006020820190506135af600083018461308b565b92915050565b60006080820190506135ca600083018761308b565b6135d7602083018661308b565b6135e46040830185613517565b81810360608301526135f68184613107565b905095945050505050565b6000604082019050613616600083018561308b565b6136236020830184613517565b9392505050565b60006020820190508181036000830152613644818461309a565b905092915050565b600060208201905061366160008301846130f8565b92915050565b600060208201905081810360008301526136818184613140565b905092915050565b600060208201905081810360008301526136a281613229565b9050919050565b600060208201905081810360008301526136c28161324c565b9050919050565b600060208201905081810360008301526136e28161326f565b9050919050565b6000602082019050818103600083015261370281613292565b9050919050565b60006020820190508181036000830152613722816132b5565b9050919050565b60006020820190508181036000830152613742816132d8565b9050919050565b60006020820190508181036000830152613762816132fb565b9050919050565b600060208201905081810360008301526137828161331e565b9050919050565b600060208201905081810360008301526137a281613341565b9050919050565b600060208201905081810360008301526137c281613364565b9050919050565b600060208201905081810360008301526137e281613387565b9050919050565b60006020820190508181036000830152613802816133aa565b9050919050565b60006020820190508181036000830152613822816133cd565b9050919050565b60006020820190508181036000830152613842816133f0565b9050919050565b6000602082019050818103600083015261386281613413565b9050919050565b6000602082019050818103600083015261388281613459565b9050919050565b600060208201905081810360008301526138a28161347c565b9050919050565b600060208201905081810360008301526138c28161349f565b9050919050565b600060208201905081810360008301526138e2816134c2565b9050919050565b60006020820190508181036000830152613902816134e5565b9050919050565b600060208201905061391e6000830184613517565b92915050565b600061392e61393f565b905061393a8282613c5c565b919050565b6000604051905090565b600067ffffffffffffffff82111561396457613963613dc3565b5b61396d82613e10565b9050602081019050919050565b600067ffffffffffffffff82111561399557613994613dc3565b5b61399e82613e10565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a5282613bc6565b9150613a5d83613bc6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a9257613a91613d07565b5b828201905092915050565b6000613aa882613bc6565b9150613ab383613bc6565b925082613ac357613ac2613d36565b5b828204905092915050565b6000613ad982613bc6565b9150613ae483613bc6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b1d57613b1c613d07565b5b828202905092915050565b6000613b3382613bc6565b9150613b3e83613bc6565b925082821015613b5157613b50613d07565b5b828203905092915050565b6000613b6782613ba6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015613c15578082015181840152602081019050613bfa565b83811115613c24576000848401525b50505050565b60006002820490506001821680613c4257607f821691505b60208210811415613c5657613c55613d65565b5b50919050565b613c6582613e10565b810181811067ffffffffffffffff82111715613c8457613c83613dc3565b5b80604052505050565b6000613c9882613bc6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ccb57613cca613d07565b5b600182019050919050565b6000613ce182613bc6565b9150613cec83613bc6565b925082613cfc57613cfb613d36565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f7472792066726f6d206f75722077656273697465206d6f746865726675636b6560008201527f7221000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79206f6e65207065722077616c6c657420626974636821000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b7f5075626c6963206d696e74206973206e6f74206f70656e207375636b65722100600082015250565b61430381613b5c565b811461430e57600080fd5b50565b61431a81613b6e565b811461432557600080fd5b50565b61433181613b7a565b811461433c57600080fd5b50565b61434881613bc6565b811461435357600080fd5b50565b61435f81613bd0565b811461436a57600080fd5b5056fea2646970667358221220a2cefa613e35962cbbfbc17508a63341d8fa79d55f9d30cda4bc6fd8863b948264736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000002ee00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000006668747470733a2f2f6261667962656961796d77336b37657072376f79676c6c6c6d33367579637377336f6a7768636e377a7a787372756435336865786a786a336a6c752e697066732e6e667473746f726167652e6c696e6b2f6d657461646174612e6a736f6e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000294966494c69737442656c6f77546865466c6f6f724d794d756d5375636b73476f626c696e734469636b0000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _royaltyFeesInBips (uint96): 750
Arg [1] : _contractURI (string): https://bafybeiaymw3k7epr7oyglllm36uycsw3ojwhcn7zzxsrud53hexjxj3jlu.ipfs.nftstorage.link/metadata.json
Arg [2] : _Ps (string): IfIListBelowTheFloorMyMumSucksGoblinsDick
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000002ee
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000066
Arg [4] : 68747470733a2f2f6261667962656961796d77336b37657072376f79676c6c6c
Arg [5] : 6d33367579637377336f6a7768636e377a7a787372756435336865786a786a33
Arg [6] : 6a6c752e697066732e6e667473746f726167652e6c696e6b2f6d657461646174
Arg [7] : 612e6a736f6e0000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000029
Arg [9] : 4966494c69737442656c6f77546865466c6f6f724d794d756d5375636b73476f
Arg [10] : 626c696e734469636b0000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
47034:4447:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51011:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51191:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33454:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34967:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34484:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50136:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47989:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35667:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22936:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;50219:466;;;;;;;;;;;;;:::i;:::-;;36074:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48805:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47299:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47570:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47199:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33165:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32896:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8012:103;;;;;;;;;;;;;:::i;:::-;;48084:552;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50028:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7364:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51352:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47403:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33623:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35210:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47515:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49886:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36330:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47445:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49446:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47367:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47337:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35436:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48644:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8270:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51011:172;51118:4;51141:36;51165:11;51141:23;:36::i;:::-;51134:43;;51011:172;;;:::o;51191:153::-;7250:13;:11;:13::i;:::-;51287:49:::1;51306:9;51317:18;51287;:49::i;:::-;51191:153:::0;;:::o;33454:100::-;33508:13;33541:5;33534:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33454:100;:::o;34967:171::-;35043:7;35063:23;35078:7;35063:14;:23::i;:::-;35106:15;:24;35122:7;35106:24;;;;;;;;;;;;;;;;;;;;;35099:31;;34967:171;;;:::o;34484:417::-;34565:13;34581:23;34596:7;34581:14;:23::i;:::-;34565:39;;34629:5;34623:11;;:2;:11;;;;34615:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;34723:5;34707:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;34732:37;34749:5;34756:12;:10;:12::i;:::-;34732:16;:37::i;:::-;34707:62;34685:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;34872:21;34881:2;34885:7;34872:8;:21::i;:::-;34554:347;34484:417;;:::o;50136:77::-;7250:13;:11;:13::i;:::-;50201:6:::1;50192;;:15;;;;;;;;;;;;;;;;;;50136:77:::0;:::o;47989:89::-;48033:7;48056:16;:6;:14;:16::i;:::-;48049:23;;47989:89;:::o;35667:336::-;35862:41;35881:12;:10;:12::i;:::-;35895:7;35862:18;:41::i;:::-;35854:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;35967:28;35977:4;35983:2;35987:7;35967:9;:28::i;:::-;35667:336;;;:::o;22936:442::-;23033:7;23042;23062:26;23091:17;:27;23109:8;23091:27;;;;;;;;;;;23062:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23163:1;23135:30;;:7;:16;;;:30;;;23131:92;;;23192:19;23182:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23131:92;23235:21;23300:17;:15;:17::i;:::-;23259:58;;23273:7;:23;;;23260:36;;:10;:36;;;;:::i;:::-;23259:58;;;;:::i;:::-;23235:82;;23338:7;:16;;;23356:13;23330:40;;;;;;22936:442;;;;;:::o;50219:466::-;7250:13;:11;:13::i;:::-;50507:7:::1;50528;:5;:7::i;:::-;50520:21;;50549;50520:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50506:69;;;50590:2;50582:11;;;::::0;::::1;;50256:429;50219:466::o:0;36074:185::-;36212:39;36229:4;36235:2;36239:7;36212:39;;;;;;;;;;;;:16;:39::i;:::-;36074:185;;;:::o;48805:635::-;48880:16;48908:23;48934:17;48944:6;48934:9;:17::i;:::-;48908:43;;48958:30;49005:15;48991:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48958:63;;49028:22;49053:1;49028:26;;49061:23;49097:309;49122:15;49104;:33;:64;;;;;49159:9;;49141:14;:27;;49104:64;49097:309;;;49179:25;49207:23;49215:14;49207:7;:23::i;:::-;49179:51;;49266:6;49245:27;;:17;:27;;;49241:131;;;49318:14;49285:13;49299:15;49285:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;49345:17;;;;;:::i;:::-;;;;49241:131;49382:16;;;;;:::i;:::-;;;;49170:236;49097:309;;;49421:13;49414:20;;;;;;48805:635;;;:::o;47299:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47570:25::-;;;;;;;;;;;;;:::o;47199:95::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33165:222::-;33237:7;33257:13;33273:7;:16;33281:7;33273:16;;;;;;;;;;;;;;;;;;;;;33257:32;;33325:1;33308:19;;:5;:19;;;;33300:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;33374:5;33367:12;;;33165:222;;;:::o;32896:207::-;32968:7;33013:1;32996:19;;:5;:19;;;;32988:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33079:9;:16;33089:5;33079:16;;;;;;;;;;;;;;;;33072:23;;32896:207;;;:::o;8012:103::-;7250:13;:11;:13::i;:::-;8077:30:::1;8104:1;8077:18;:30::i;:::-;8012:103::o:0;48084:552::-;48174:11;47933:9;;47918:11;47899:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;47891:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;48203:6:::1;;;;;;;;;;;48202:7;48194:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;48331:2;48314:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;48304:31;;;;;;48288:8;48271:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;48261:37;;;;;;48260:76;48252:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;48405:1;48391:11;:15;:52;;;;;48425:18;;48410:11;:33;;48391:52;48383:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;48517:1;48489:13;:25;48503:10;48489:25;;;;;;;;;;;;;;;;:29;48481:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48556:13;:25;48570:10;48556:25;;;;;;;;;;;;;;;;:27;;;;;;;;;:::i;:::-;;;;;;48596:34;48606:10;48618:11;48596:9;:34::i;:::-;48084:552:::0;;;:::o;50028:100::-;7250:13;:11;:13::i;:::-;50112:10:::1;50100:9;:22;;;;;;;;;;;;:::i;:::-;;50028:100:::0;:::o;7364:87::-;7410:7;7437:6;;;;;;;;;;;7430:13;;7364:87;:::o;51352:114::-;7250:13;:11;:13::i;:::-;51446:12:::1;;51432:11;:26;;;;;;;:::i;:::-;;51352:114:::0;;:::o;47403:37::-;;;;:::o;33623:104::-;33679:13;33712:7;33705:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33623:104;:::o;35210:155::-;35305:52;35324:12;:10;:12::i;:::-;35338:8;35348;35305:18;:52::i;:::-;35210:155;;:::o;47515:48::-;;;;;;;;;;;;;;;;;:::o;49886:130::-;7250:13;:11;:13::i;:::-;49991:19:::1;49970:18;:40;;;;49886:130:::0;:::o;36330:323::-;36504:41;36523:12;:10;:12::i;:::-;36537:7;36504:18;:41::i;:::-;36496:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;36607:38;36621:4;36627:2;36631:7;36640:4;36607:13;:38::i;:::-;36330:323;;;;:::o;47445:41::-;;;;:::o;49446:428::-;49545:13;49586:17;49594:8;49586:7;:17::i;:::-;49570:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;49683:28;49714:10;:8;:10::i;:::-;49683:41;;49769:1;49744:14;49738:28;:32;:130;;;;;;;;;;;;;;;;;49806:14;49822:19;:8;:17;:19::i;:::-;49843:9;49789:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49738:130;49731:137;;;49446:428;;;:::o;47367:31::-;;;;:::o;47337:25::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35436:164::-;35533:4;35557:18;:25;35576:5;35557:25;;;;;;;;;;;;;;;:35;35583:8;35557:35;;;;;;;;;;;;;;;;;;;;;;;;;35550:42;;35436:164;;;;:::o;48644:155::-;48730:11;47933:9;;47918:11;47899:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;47891:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7250:13:::1;:11;:13::i;:::-;48760:33:::2;48770:9;48781:11;48760:9;:33::i;:::-;48644:155:::0;;;:::o;8270:201::-;7250:13;:11;:13::i;:::-;8379:1:::1;8359:22;;:8;:22;;;;8351:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8435:28;8454:8;8435:18;:28::i;:::-;8270:201:::0;:::o;22666:215::-;22768:4;22807:26;22792:41;;;:11;:41;;;;:81;;;;22837:36;22861:11;22837:23;:36::i;:::-;22792:81;22785:88;;22666:215;;;:::o;7529:132::-;7604:12;:10;:12::i;:::-;7593:23;;:7;:5;:7::i;:::-;:23;;;7585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7529:132::o;24028:332::-;24147:17;:15;:17::i;:::-;24131:33;;:12;:33;;;;24123:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;24250:1;24230:22;;:8;:22;;;;24222:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24317:35;;;;;;;;24329:8;24317:35;;;;;;24339:12;24317:35;;;;;24295:19;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24028:332;;:::o;42942:135::-;43024:16;43032:7;43024;:16::i;:::-;43016:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;42942:135;:::o;5915:98::-;5968:7;5995:10;5988:17;;5915:98;:::o;42221:174::-;42323:2;42296:15;:24;42312:7;42296:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;42379:7;42375:2;42341:46;;42350:23;42365:7;42350:14;:23::i;:::-;42341:46;;;;;;;;;;;;42221:174;;:::o;2146:114::-;2211:7;2238;:14;;;2231:21;;2146:114;;;:::o;38454:264::-;38547:4;38564:13;38580:23;38595:7;38580:14;:23::i;:::-;38564:39;;38633:5;38622:16;;:7;:16;;;:52;;;;38642:32;38659:5;38666:7;38642:16;:32::i;:::-;38622:52;:87;;;;38702:7;38678:31;;:20;38690:7;38678:11;:20::i;:::-;:31;;;38622:87;38614:96;;;38454:264;;;;:::o;41477:625::-;41636:4;41609:31;;:23;41624:7;41609:14;:23::i;:::-;:31;;;41601:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;41715:1;41701:16;;:2;:16;;;;41693:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41771:39;41792:4;41798:2;41802:7;41771:20;:39::i;:::-;41875:29;41892:1;41896:7;41875:8;:29::i;:::-;41936:1;41917:9;:15;41927:4;41917:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;41965:1;41948:9;:13;41958:2;41948:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41996:2;41977:7;:16;41985:7;41977:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;42035:7;42031:2;42016:27;;42025:4;42016:27;;;;;;;;;;;;42056:38;42076:4;42082:2;42086:7;42056:19;:38::i;:::-;41477:625;;;:::o;23660:97::-;23718:6;23744:5;23737:12;;23660:97;:::o;8631:191::-;8705:16;8724:6;;;;;;;;;;;8705:25;;8750:8;8741:6;;:17;;;;;;;;;;;;;;;;;;8805:8;8774:40;;8795:8;8774:40;;;;;;;;;;;;8694:128;8631:191;:::o;50691:204::-;50771:9;50766:124;50790:11;50786:1;:15;50766:124;;;50817:18;:6;:16;:18::i;:::-;50844:38;50854:9;50865:16;:6;:14;:16::i;:::-;50844:9;:38::i;:::-;50803:3;;;;;:::i;:::-;;;;50766:124;;;;50691:204;;:::o;42538:315::-;42693:8;42684:17;;:5;:17;;;;42676:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42780:8;42742:18;:25;42761:5;42742:25;;;;;;;;;;;;;;;:35;42768:8;42742:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;42826:8;42804:41;;42819:5;42804:41;;;42836:8;42804:41;;;;;;:::i;:::-;;;;;;;;42538:315;;;:::o;37534:313::-;37690:28;37700:4;37706:2;37710:7;37690:9;:28::i;:::-;37737:47;37760:4;37766:2;37770:7;37779:4;37737:22;:47::i;:::-;37729:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;37534:313;;;;:::o;38160:127::-;38225:4;38277:1;38249:30;;:7;:16;38257:7;38249:16;;;;;;;;;;;;;;;;;;;;;:30;;;;38242:37;;38160:127;;;:::o;50901:104::-;50961:13;50990:9;50983:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50901:104;:::o;3169:723::-;3225:13;3455:1;3446:5;:10;3442:53;;;3473:10;;;;;;;;;;;;;;;;;;;;;3442:53;3505:12;3520:5;3505:20;;3536:14;3561:78;3576:1;3568:4;:9;3561:78;;3594:8;;;;;:::i;:::-;;;;3625:2;3617:10;;;;;:::i;:::-;;;3561:78;;;3649:19;3681:6;3671:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3649:39;;3699:154;3715:1;3706:5;:10;3699:154;;3743:1;3733:11;;;;;:::i;:::-;;;3810:2;3802:5;:10;;;;:::i;:::-;3789:2;:24;;;;:::i;:::-;3776:39;;3759:6;3766;3759:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3839:2;3830:11;;;;;:::i;:::-;;;3699:154;;;3877:6;3863:21;;;;;3169:723;;;;:::o;32527:305::-;32629:4;32681:25;32666:40;;;:11;:40;;;;:105;;;;32738:33;32723:48;;;:11;:48;;;;32666:105;:158;;;;32788:36;32812:11;32788:23;:36::i;:::-;32666:158;32646:178;;32527:305;;;:::o;45066:126::-;;;;:::o;45577:125::-;;;;:::o;2268:127::-;2375:1;2357:7;:14;;;:19;;;;;;;;;;;2268:127;:::o;39060:110::-;39136:26;39146:2;39150:7;39136:26;;;;;;;;;;;;:9;:26::i;:::-;39060:110;;:::o;43641:853::-;43795:4;43816:15;:2;:13;;;:15::i;:::-;43812:675;;;43868:2;43852:36;;;43889:12;:10;:12::i;:::-;43903:4;43909:7;43918:4;43852:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;43848:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44110:1;44093:6;:13;:18;44089:328;;;44136:60;;;;;;;;;;:::i;:::-;;;;;;;;44089:328;44367:6;44361:13;44352:6;44348:2;44344:15;44337:38;43848:584;43984:41;;;43974:51;;;:6;:51;;;;43967:58;;;;;43812:675;44471:4;44464:11;;43641:853;;;;;;;:::o;21116:157::-;21201:4;21240:25;21225:40;;;:11;:40;;;;21218:47;;21116:157;;;:::o;39397:319::-;39526:18;39532:2;39536:7;39526:5;:18::i;:::-;39577:53;39608:1;39612:2;39616:7;39625:4;39577:22;:53::i;:::-;39555:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;39397:319;;;:::o;10062:326::-;10122:4;10379:1;10357:7;:19;;;:23;10350:30;;10062:326;;;:::o;40052:439::-;40146:1;40132:16;;:2;:16;;;;40124:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40205:16;40213:7;40205;:16::i;:::-;40204:17;40196:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40267:45;40296:1;40300:2;40304:7;40267:20;:45::i;:::-;40342:1;40325:9;:13;40335:2;40325:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40373:2;40354:7;:16;40362:7;40354:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40418:7;40414:2;40393:33;;40410:1;40393:33;;;;;;;;;;;;40439:44;40467:1;40471:2;40475:7;40439:19;:44::i;:::-;40052:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:553::-;1844:8;1854:6;1904:3;1897:4;1889:6;1885:17;1881:27;1871:122;;1912:79;;:::i;:::-;1871:122;2025:6;2012:20;2002:30;;2055:18;2047:6;2044:30;2041:117;;;2077:79;;:::i;:::-;2041:117;2191:4;2183:6;2179:17;2167:29;;2245:3;2237:4;2229:6;2225:17;2215:8;2211:32;2208:41;2205:128;;;2252:79;;:::i;:::-;2205:128;1786:553;;;;;:::o;2359:340::-;2415:5;2464:3;2457:4;2449:6;2445:17;2441:27;2431:122;;2472:79;;:::i;:::-;2431:122;2589:6;2576:20;2614:79;2689:3;2681:6;2674:4;2666:6;2662:17;2614:79;:::i;:::-;2605:88;;2421:278;2359:340;;;;:::o;2705:139::-;2751:5;2789:6;2776:20;2767:29;;2805:33;2832:5;2805:33;:::i;:::-;2705:139;;;;:::o;2850:137::-;2895:5;2933:6;2920:20;2911:29;;2949:32;2975:5;2949:32;:::i;:::-;2850:137;;;;:::o;2993:329::-;3052:6;3101:2;3089:9;3080:7;3076:23;3072:32;3069:119;;;3107:79;;:::i;:::-;3069:119;3227:1;3252:53;3297:7;3288:6;3277:9;3273:22;3252:53;:::i;:::-;3242:63;;3198:117;2993:329;;;;:::o;3328:474::-;3396:6;3404;3453:2;3441:9;3432:7;3428:23;3424:32;3421:119;;;3459:79;;:::i;:::-;3421:119;3579:1;3604:53;3649:7;3640:6;3629:9;3625:22;3604:53;:::i;:::-;3594:63;;3550:117;3706:2;3732:53;3777:7;3768:6;3757:9;3753:22;3732:53;:::i;:::-;3722:63;;3677:118;3328:474;;;;;:::o;3808:619::-;3885:6;3893;3901;3950:2;3938:9;3929:7;3925:23;3921:32;3918:119;;;3956:79;;:::i;:::-;3918:119;4076:1;4101:53;4146:7;4137:6;4126:9;4122:22;4101:53;:::i;:::-;4091:63;;4047:117;4203:2;4229:53;4274:7;4265:6;4254:9;4250:22;4229:53;:::i;:::-;4219:63;;4174:118;4331:2;4357:53;4402:7;4393:6;4382:9;4378:22;4357:53;:::i;:::-;4347:63;;4302:118;3808:619;;;;;:::o;4433:943::-;4528:6;4536;4544;4552;4601:3;4589:9;4580:7;4576:23;4572:33;4569:120;;;4608:79;;:::i;:::-;4569:120;4728:1;4753:53;4798:7;4789:6;4778:9;4774:22;4753:53;:::i;:::-;4743:63;;4699:117;4855:2;4881:53;4926:7;4917:6;4906:9;4902:22;4881:53;:::i;:::-;4871:63;;4826:118;4983:2;5009:53;5054:7;5045:6;5034:9;5030:22;5009:53;:::i;:::-;4999:63;;4954:118;5139:2;5128:9;5124:18;5111:32;5170:18;5162:6;5159:30;5156:117;;;5192:79;;:::i;:::-;5156:117;5297:62;5351:7;5342:6;5331:9;5327:22;5297:62;:::i;:::-;5287:72;;5082:287;4433:943;;;;;;;:::o;5382:468::-;5447:6;5455;5504:2;5492:9;5483:7;5479:23;5475:32;5472:119;;;5510:79;;:::i;:::-;5472:119;5630:1;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5601:117;5757:2;5783:50;5825:7;5816:6;5805:9;5801:22;5783:50;:::i;:::-;5773:60;;5728:115;5382:468;;;;;:::o;5856:474::-;5924:6;5932;5981:2;5969:9;5960:7;5956:23;5952:32;5949:119;;;5987:79;;:::i;:::-;5949:119;6107:1;6132:53;6177:7;6168:6;6157:9;6153:22;6132:53;:::i;:::-;6122:63;;6078:117;6234:2;6260:53;6305:7;6296:6;6285:9;6281:22;6260:53;:::i;:::-;6250:63;;6205:118;5856:474;;;;;:::o;6336:472::-;6403:6;6411;6460:2;6448:9;6439:7;6435:23;6431:32;6428:119;;;6466:79;;:::i;:::-;6428:119;6586:1;6611:53;6656:7;6647:6;6636:9;6632:22;6611:53;:::i;:::-;6601:63;;6557:117;6713:2;6739:52;6783:7;6774:6;6763:9;6759:22;6739:52;:::i;:::-;6729:62;;6684:117;6336:472;;;;;:::o;6814:323::-;6870:6;6919:2;6907:9;6898:7;6894:23;6890:32;6887:119;;;6925:79;;:::i;:::-;6887:119;7045:1;7070:50;7112:7;7103:6;7092:9;7088:22;7070:50;:::i;:::-;7060:60;;7016:114;6814:323;;;;:::o;7143:327::-;7201:6;7250:2;7238:9;7229:7;7225:23;7221:32;7218:119;;;7256:79;;:::i;:::-;7218:119;7376:1;7401:52;7445:7;7436:6;7425:9;7421:22;7401:52;:::i;:::-;7391:62;;7347:116;7143:327;;;;:::o;7476:349::-;7545:6;7594:2;7582:9;7573:7;7569:23;7565:32;7562:119;;;7600:79;;:::i;:::-;7562:119;7720:1;7745:63;7800:7;7791:6;7780:9;7776:22;7745:63;:::i;:::-;7735:73;;7691:127;7476:349;;;;:::o;7831:529::-;7902:6;7910;7959:2;7947:9;7938:7;7934:23;7930:32;7927:119;;;7965:79;;:::i;:::-;7927:119;8113:1;8102:9;8098:17;8085:31;8143:18;8135:6;8132:30;8129:117;;;8165:79;;:::i;:::-;8129:117;8278:65;8335:7;8326:6;8315:9;8311:22;8278:65;:::i;:::-;8260:83;;;;8056:297;7831:529;;;;;:::o;8366:509::-;8435:6;8484:2;8472:9;8463:7;8459:23;8455:32;8452:119;;;8490:79;;:::i;:::-;8452:119;8638:1;8627:9;8623:17;8610:31;8668:18;8660:6;8657:30;8654:117;;;8690:79;;:::i;:::-;8654:117;8795:63;8850:7;8841:6;8830:9;8826:22;8795:63;:::i;:::-;8785:73;;8581:287;8366:509;;;;:::o;8881:329::-;8940:6;8989:2;8977:9;8968:7;8964:23;8960:32;8957:119;;;8995:79;;:::i;:::-;8957:119;9115:1;9140:53;9185:7;9176:6;9165:9;9161:22;9140:53;:::i;:::-;9130:63;;9086:117;8881:329;;;;:::o;9216:474::-;9284:6;9292;9341:2;9329:9;9320:7;9316:23;9312:32;9309:119;;;9347:79;;:::i;:::-;9309:119;9467:1;9492:53;9537:7;9528:6;9517:9;9513:22;9492:53;:::i;:::-;9482:63;;9438:117;9594:2;9620:53;9665:7;9656:6;9645:9;9641:22;9620:53;:::i;:::-;9610:63;;9565:118;9216:474;;;;;:::o;9696:654::-;9774:6;9782;9831:2;9819:9;9810:7;9806:23;9802:32;9799:119;;;9837:79;;:::i;:::-;9799:119;9957:1;9982:53;10027:7;10018:6;10007:9;10003:22;9982:53;:::i;:::-;9972:63;;9928:117;10112:2;10101:9;10097:18;10084:32;10143:18;10135:6;10132:30;10129:117;;;10165:79;;:::i;:::-;10129:117;10270:63;10325:7;10316:6;10305:9;10301:22;10270:63;:::i;:::-;10260:73;;10055:288;9696:654;;;;;:::o;10356:474::-;10424:6;10432;10481:2;10469:9;10460:7;10456:23;10452:32;10449:119;;;10487:79;;:::i;:::-;10449:119;10607:1;10632:53;10677:7;10668:6;10657:9;10653:22;10632:53;:::i;:::-;10622:63;;10578:117;10734:2;10760:53;10805:7;10796:6;10785:9;10781:22;10760:53;:::i;:::-;10750:63;;10705:118;10356:474;;;;;:::o;10836:179::-;10905:10;10926:46;10968:3;10960:6;10926:46;:::i;:::-;11004:4;10999:3;10995:14;10981:28;;10836:179;;;;:::o;11021:118::-;11108:24;11126:5;11108:24;:::i;:::-;11103:3;11096:37;11021:118;;:::o;11175:732::-;11294:3;11323:54;11371:5;11323:54;:::i;:::-;11393:86;11472:6;11467:3;11393:86;:::i;:::-;11386:93;;11503:56;11553:5;11503:56;:::i;:::-;11582:7;11613:1;11598:284;11623:6;11620:1;11617:13;11598:284;;;11699:6;11693:13;11726:63;11785:3;11770:13;11726:63;:::i;:::-;11719:70;;11812:60;11865:6;11812:60;:::i;:::-;11802:70;;11658:224;11645:1;11642;11638:9;11633:14;;11598:284;;;11602:14;11898:3;11891:10;;11299:608;;;11175:732;;;;:::o;11913:109::-;11994:21;12009:5;11994:21;:::i;:::-;11989:3;11982:34;11913:109;;:::o;12028:360::-;12114:3;12142:38;12174:5;12142:38;:::i;:::-;12196:70;12259:6;12254:3;12196:70;:::i;:::-;12189:77;;12275:52;12320:6;12315:3;12308:4;12301:5;12297:16;12275:52;:::i;:::-;12352:29;12374:6;12352:29;:::i;:::-;12347:3;12343:39;12336:46;;12118:270;12028:360;;;;:::o;12394:364::-;12482:3;12510:39;12543:5;12510:39;:::i;:::-;12565:71;12629:6;12624:3;12565:71;:::i;:::-;12558:78;;12645:52;12690:6;12685:3;12678:4;12671:5;12667:16;12645:52;:::i;:::-;12722:29;12744:6;12722:29;:::i;:::-;12717:3;12713:39;12706:46;;12486:272;12394:364;;;;:::o;12764:377::-;12870:3;12898:39;12931:5;12898:39;:::i;:::-;12953:89;13035:6;13030:3;12953:89;:::i;:::-;12946:96;;13051:52;13096:6;13091:3;13084:4;13077:5;13073:16;13051:52;:::i;:::-;13128:6;13123:3;13119:16;13112:23;;12874:267;12764:377;;;;:::o;13171:845::-;13274:3;13311:5;13305:12;13340:36;13366:9;13340:36;:::i;:::-;13392:89;13474:6;13469:3;13392:89;:::i;:::-;13385:96;;13512:1;13501:9;13497:17;13528:1;13523:137;;;;13674:1;13669:341;;;;13490:520;;13523:137;13607:4;13603:9;13592;13588:25;13583:3;13576:38;13643:6;13638:3;13634:16;13627:23;;13523:137;;13669:341;13736:38;13768:5;13736:38;:::i;:::-;13796:1;13810:154;13824:6;13821:1;13818:13;13810:154;;;13898:7;13892:14;13888:1;13883:3;13879:11;13872:35;13948:1;13939:7;13935:15;13924:26;;13846:4;13843:1;13839:12;13834:17;;13810:154;;;13993:6;13988:3;13984:16;13977:23;;13676:334;;13490:520;;13278:738;;13171:845;;;;:::o;14022:366::-;14164:3;14185:67;14249:2;14244:3;14185:67;:::i;:::-;14178:74;;14261:93;14350:3;14261:93;:::i;:::-;14379:2;14374:3;14370:12;14363:19;;14022:366;;;:::o;14394:::-;14536:3;14557:67;14621:2;14616:3;14557:67;:::i;:::-;14550:74;;14633:93;14722:3;14633:93;:::i;:::-;14751:2;14746:3;14742:12;14735:19;;14394:366;;;:::o;14766:::-;14908:3;14929:67;14993:2;14988:3;14929:67;:::i;:::-;14922:74;;15005:93;15094:3;15005:93;:::i;:::-;15123:2;15118:3;15114:12;15107:19;;14766:366;;;:::o;15138:::-;15280:3;15301:67;15365:2;15360:3;15301:67;:::i;:::-;15294:74;;15377:93;15466:3;15377:93;:::i;:::-;15495:2;15490:3;15486:12;15479:19;;15138:366;;;:::o;15510:::-;15652:3;15673:67;15737:2;15732:3;15673:67;:::i;:::-;15666:74;;15749:93;15838:3;15749:93;:::i;:::-;15867:2;15862:3;15858:12;15851:19;;15510:366;;;:::o;15882:::-;16024:3;16045:67;16109:2;16104:3;16045:67;:::i;:::-;16038:74;;16121:93;16210:3;16121:93;:::i;:::-;16239:2;16234:3;16230:12;16223:19;;15882:366;;;:::o;16254:::-;16396:3;16417:67;16481:2;16476:3;16417:67;:::i;:::-;16410:74;;16493:93;16582:3;16493:93;:::i;:::-;16611:2;16606:3;16602:12;16595:19;;16254:366;;;:::o;16626:::-;16768:3;16789:67;16853:2;16848:3;16789:67;:::i;:::-;16782:74;;16865:93;16954:3;16865:93;:::i;:::-;16983:2;16978:3;16974:12;16967:19;;16626:366;;;:::o;16998:::-;17140:3;17161:67;17225:2;17220:3;17161:67;:::i;:::-;17154:74;;17237:93;17326:3;17237:93;:::i;:::-;17355:2;17350:3;17346:12;17339:19;;16998:366;;;:::o;17370:::-;17512:3;17533:67;17597:2;17592:3;17533:67;:::i;:::-;17526:74;;17609:93;17698:3;17609:93;:::i;:::-;17727:2;17722:3;17718:12;17711:19;;17370:366;;;:::o;17742:::-;17884:3;17905:67;17969:2;17964:3;17905:67;:::i;:::-;17898:74;;17981:93;18070:3;17981:93;:::i;:::-;18099:2;18094:3;18090:12;18083:19;;17742:366;;;:::o;18114:::-;18256:3;18277:67;18341:2;18336:3;18277:67;:::i;:::-;18270:74;;18353:93;18442:3;18353:93;:::i;:::-;18471:2;18466:3;18462:12;18455:19;;18114:366;;;:::o;18486:::-;18628:3;18649:67;18713:2;18708:3;18649:67;:::i;:::-;18642:74;;18725:93;18814:3;18725:93;:::i;:::-;18843:2;18838:3;18834:12;18827:19;;18486:366;;;:::o;18858:::-;19000:3;19021:67;19085:2;19080:3;19021:67;:::i;:::-;19014:74;;19097:93;19186:3;19097:93;:::i;:::-;19215:2;19210:3;19206:12;19199:19;;18858:366;;;:::o;19230:::-;19372:3;19393:67;19457:2;19452:3;19393:67;:::i;:::-;19386:74;;19469:93;19558:3;19469:93;:::i;:::-;19587:2;19582:3;19578:12;19571:19;;19230:366;;;:::o;19602:398::-;19761:3;19782:83;19863:1;19858:3;19782:83;:::i;:::-;19775:90;;19874:93;19963:3;19874:93;:::i;:::-;19992:1;19987:3;19983:11;19976:18;;19602:398;;;:::o;20006:366::-;20148:3;20169:67;20233:2;20228:3;20169:67;:::i;:::-;20162:74;;20245:93;20334:3;20245:93;:::i;:::-;20363:2;20358:3;20354:12;20347:19;;20006:366;;;:::o;20378:::-;20520:3;20541:67;20605:2;20600:3;20541:67;:::i;:::-;20534:74;;20617:93;20706:3;20617:93;:::i;:::-;20735:2;20730:3;20726:12;20719:19;;20378:366;;;:::o;20750:::-;20892:3;20913:67;20977:2;20972:3;20913:67;:::i;:::-;20906:74;;20989:93;21078:3;20989:93;:::i;:::-;21107:2;21102:3;21098:12;21091:19;;20750:366;;;:::o;21122:::-;21264:3;21285:67;21349:2;21344:3;21285:67;:::i;:::-;21278:74;;21361:93;21450:3;21361:93;:::i;:::-;21479:2;21474:3;21470:12;21463:19;;21122:366;;;:::o;21494:::-;21636:3;21657:67;21721:2;21716:3;21657:67;:::i;:::-;21650:74;;21733:93;21822:3;21733:93;:::i;:::-;21851:2;21846:3;21842:12;21835:19;;21494:366;;;:::o;21866:108::-;21943:24;21961:5;21943:24;:::i;:::-;21938:3;21931:37;21866:108;;:::o;21980:118::-;22067:24;22085:5;22067:24;:::i;:::-;22062:3;22055:37;21980:118;;:::o;22104:275::-;22236:3;22258:95;22349:3;22340:6;22258:95;:::i;:::-;22251:102;;22370:3;22363:10;;22104:275;;;;:::o;22385:589::-;22610:3;22632:95;22723:3;22714:6;22632:95;:::i;:::-;22625:102;;22744:95;22835:3;22826:6;22744:95;:::i;:::-;22737:102;;22856:92;22944:3;22935:6;22856:92;:::i;:::-;22849:99;;22965:3;22958:10;;22385:589;;;;;;:::o;22980:269::-;23109:3;23131:92;23219:3;23210:6;23131:92;:::i;:::-;23124:99;;23240:3;23233:10;;22980:269;;;;:::o;23255:379::-;23439:3;23461:147;23604:3;23461:147;:::i;:::-;23454:154;;23625:3;23618:10;;23255:379;;;:::o;23640:222::-;23733:4;23771:2;23760:9;23756:18;23748:26;;23784:71;23852:1;23841:9;23837:17;23828:6;23784:71;:::i;:::-;23640:222;;;;:::o;23868:640::-;24063:4;24101:3;24090:9;24086:19;24078:27;;24115:71;24183:1;24172:9;24168:17;24159:6;24115:71;:::i;:::-;24196:72;24264:2;24253:9;24249:18;24240:6;24196:72;:::i;:::-;24278;24346:2;24335:9;24331:18;24322:6;24278:72;:::i;:::-;24397:9;24391:4;24387:20;24382:2;24371:9;24367:18;24360:48;24425:76;24496:4;24487:6;24425:76;:::i;:::-;24417:84;;23868:640;;;;;;;:::o;24514:332::-;24635:4;24673:2;24662:9;24658:18;24650:26;;24686:71;24754:1;24743:9;24739:17;24730:6;24686:71;:::i;:::-;24767:72;24835:2;24824:9;24820:18;24811:6;24767:72;:::i;:::-;24514:332;;;;;:::o;24852:373::-;24995:4;25033:2;25022:9;25018:18;25010:26;;25082:9;25076:4;25072:20;25068:1;25057:9;25053:17;25046:47;25110:108;25213:4;25204:6;25110:108;:::i;:::-;25102:116;;24852:373;;;;:::o;25231:210::-;25318:4;25356:2;25345:9;25341:18;25333:26;;25369:65;25431:1;25420:9;25416:17;25407:6;25369:65;:::i;:::-;25231:210;;;;:::o;25447:313::-;25560:4;25598:2;25587:9;25583:18;25575:26;;25647:9;25641:4;25637:20;25633:1;25622:9;25618:17;25611:47;25675:78;25748:4;25739:6;25675:78;:::i;:::-;25667:86;;25447:313;;;;:::o;25766:419::-;25932:4;25970:2;25959:9;25955:18;25947:26;;26019:9;26013:4;26009:20;26005:1;25994:9;25990:17;25983:47;26047:131;26173:4;26047:131;:::i;:::-;26039:139;;25766:419;;;:::o;26191:::-;26357:4;26395:2;26384:9;26380:18;26372:26;;26444:9;26438:4;26434:20;26430:1;26419:9;26415:17;26408:47;26472:131;26598:4;26472:131;:::i;:::-;26464:139;;26191:419;;;:::o;26616:::-;26782:4;26820:2;26809:9;26805:18;26797:26;;26869:9;26863:4;26859:20;26855:1;26844:9;26840:17;26833:47;26897:131;27023:4;26897:131;:::i;:::-;26889:139;;26616:419;;;:::o;27041:::-;27207:4;27245:2;27234:9;27230:18;27222:26;;27294:9;27288:4;27284:20;27280:1;27269:9;27265:17;27258:47;27322:131;27448:4;27322:131;:::i;:::-;27314:139;;27041:419;;;:::o;27466:::-;27632:4;27670:2;27659:9;27655:18;27647:26;;27719:9;27713:4;27709:20;27705:1;27694:9;27690:17;27683:47;27747:131;27873:4;27747:131;:::i;:::-;27739:139;;27466:419;;;:::o;27891:::-;28057:4;28095:2;28084:9;28080:18;28072:26;;28144:9;28138:4;28134:20;28130:1;28119:9;28115:17;28108:47;28172:131;28298:4;28172:131;:::i;:::-;28164:139;;27891:419;;;:::o;28316:::-;28482:4;28520:2;28509:9;28505:18;28497:26;;28569:9;28563:4;28559:20;28555:1;28544:9;28540:17;28533:47;28597:131;28723:4;28597:131;:::i;:::-;28589:139;;28316:419;;;:::o;28741:::-;28907:4;28945:2;28934:9;28930:18;28922:26;;28994:9;28988:4;28984:20;28980:1;28969:9;28965:17;28958:47;29022:131;29148:4;29022:131;:::i;:::-;29014:139;;28741:419;;;:::o;29166:::-;29332:4;29370:2;29359:9;29355:18;29347:26;;29419:9;29413:4;29409:20;29405:1;29394:9;29390:17;29383:47;29447:131;29573:4;29447:131;:::i;:::-;29439:139;;29166:419;;;:::o;29591:::-;29757:4;29795:2;29784:9;29780:18;29772:26;;29844:9;29838:4;29834:20;29830:1;29819:9;29815:17;29808:47;29872:131;29998:4;29872:131;:::i;:::-;29864:139;;29591:419;;;:::o;30016:::-;30182:4;30220:2;30209:9;30205:18;30197:26;;30269:9;30263:4;30259:20;30255:1;30244:9;30240:17;30233:47;30297:131;30423:4;30297:131;:::i;:::-;30289:139;;30016:419;;;:::o;30441:::-;30607:4;30645:2;30634:9;30630:18;30622:26;;30694:9;30688:4;30684:20;30680:1;30669:9;30665:17;30658:47;30722:131;30848:4;30722:131;:::i;:::-;30714:139;;30441:419;;;:::o;30866:::-;31032:4;31070:2;31059:9;31055:18;31047:26;;31119:9;31113:4;31109:20;31105:1;31094:9;31090:17;31083:47;31147:131;31273:4;31147:131;:::i;:::-;31139:139;;30866:419;;;:::o;31291:::-;31457:4;31495:2;31484:9;31480:18;31472:26;;31544:9;31538:4;31534:20;31530:1;31519:9;31515:17;31508:47;31572:131;31698:4;31572:131;:::i;:::-;31564:139;;31291:419;;;:::o;31716:::-;31882:4;31920:2;31909:9;31905:18;31897:26;;31969:9;31963:4;31959:20;31955:1;31944:9;31940:17;31933:47;31997:131;32123:4;31997:131;:::i;:::-;31989:139;;31716:419;;;:::o;32141:::-;32307:4;32345:2;32334:9;32330:18;32322:26;;32394:9;32388:4;32384:20;32380:1;32369:9;32365:17;32358:47;32422:131;32548:4;32422:131;:::i;:::-;32414:139;;32141:419;;;:::o;32566:::-;32732:4;32770:2;32759:9;32755:18;32747:26;;32819:9;32813:4;32809:20;32805:1;32794:9;32790:17;32783:47;32847:131;32973:4;32847:131;:::i;:::-;32839:139;;32566:419;;;:::o;32991:::-;33157:4;33195:2;33184:9;33180:18;33172:26;;33244:9;33238:4;33234:20;33230:1;33219:9;33215:17;33208:47;33272:131;33398:4;33272:131;:::i;:::-;33264:139;;32991:419;;;:::o;33416:::-;33582:4;33620:2;33609:9;33605:18;33597:26;;33669:9;33663:4;33659:20;33655:1;33644:9;33640:17;33633:47;33697:131;33823:4;33697:131;:::i;:::-;33689:139;;33416:419;;;:::o;33841:::-;34007:4;34045:2;34034:9;34030:18;34022:26;;34094:9;34088:4;34084:20;34080:1;34069:9;34065:17;34058:47;34122:131;34248:4;34122:131;:::i;:::-;34114:139;;33841:419;;;:::o;34266:222::-;34359:4;34397:2;34386:9;34382:18;34374:26;;34410:71;34478:1;34467:9;34463:17;34454:6;34410:71;:::i;:::-;34266:222;;;;:::o;34494:129::-;34528:6;34555:20;;:::i;:::-;34545:30;;34584:33;34612:4;34604:6;34584:33;:::i;:::-;34494:129;;;:::o;34629:75::-;34662:6;34695:2;34689:9;34679:19;;34629:75;:::o;34710:307::-;34771:4;34861:18;34853:6;34850:30;34847:56;;;34883:18;;:::i;:::-;34847:56;34921:29;34943:6;34921:29;:::i;:::-;34913:37;;35005:4;34999;34995:15;34987:23;;34710:307;;;:::o;35023:308::-;35085:4;35175:18;35167:6;35164:30;35161:56;;;35197:18;;:::i;:::-;35161:56;35235:29;35257:6;35235:29;:::i;:::-;35227:37;;35319:4;35313;35309:15;35301:23;;35023:308;;;:::o;35337:132::-;35404:4;35427:3;35419:11;;35457:4;35452:3;35448:14;35440:22;;35337:132;;;:::o;35475:141::-;35524:4;35547:3;35539:11;;35570:3;35567:1;35560:14;35604:4;35601:1;35591:18;35583:26;;35475:141;;;:::o;35622:114::-;35689:6;35723:5;35717:12;35707:22;;35622:114;;;:::o;35742:98::-;35793:6;35827:5;35821:12;35811:22;;35742:98;;;:::o;35846:99::-;35898:6;35932:5;35926:12;35916:22;;35846:99;;;:::o;35951:113::-;36021:4;36053;36048:3;36044:14;36036:22;;35951:113;;;:::o;36070:184::-;36169:11;36203:6;36198:3;36191:19;36243:4;36238:3;36234:14;36219:29;;36070:184;;;;:::o;36260:168::-;36343:11;36377:6;36372:3;36365:19;36417:4;36412:3;36408:14;36393:29;;36260:168;;;;:::o;36434:147::-;36535:11;36572:3;36557:18;;36434:147;;;;:::o;36587:169::-;36671:11;36705:6;36700:3;36693:19;36745:4;36740:3;36736:14;36721:29;;36587:169;;;;:::o;36762:148::-;36864:11;36901:3;36886:18;;36762:148;;;;:::o;36916:305::-;36956:3;36975:20;36993:1;36975:20;:::i;:::-;36970:25;;37009:20;37027:1;37009:20;:::i;:::-;37004:25;;37163:1;37095:66;37091:74;37088:1;37085:81;37082:107;;;37169:18;;:::i;:::-;37082:107;37213:1;37210;37206:9;37199:16;;36916:305;;;;:::o;37227:185::-;37267:1;37284:20;37302:1;37284:20;:::i;:::-;37279:25;;37318:20;37336:1;37318:20;:::i;:::-;37313:25;;37357:1;37347:35;;37362:18;;:::i;:::-;37347:35;37404:1;37401;37397:9;37392:14;;37227:185;;;;:::o;37418:348::-;37458:7;37481:20;37499:1;37481:20;:::i;:::-;37476:25;;37515:20;37533:1;37515:20;:::i;:::-;37510:25;;37703:1;37635:66;37631:74;37628:1;37625:81;37620:1;37613:9;37606:17;37602:105;37599:131;;;37710:18;;:::i;:::-;37599:131;37758:1;37755;37751:9;37740:20;;37418:348;;;;:::o;37772:191::-;37812:4;37832:20;37850:1;37832:20;:::i;:::-;37827:25;;37866:20;37884:1;37866:20;:::i;:::-;37861:25;;37905:1;37902;37899:8;37896:34;;;37910:18;;:::i;:::-;37896:34;37955:1;37952;37948:9;37940:17;;37772:191;;;;:::o;37969:96::-;38006:7;38035:24;38053:5;38035:24;:::i;:::-;38024:35;;37969:96;;;:::o;38071:90::-;38105:7;38148:5;38141:13;38134:21;38123:32;;38071:90;;;:::o;38167:149::-;38203:7;38243:66;38236:5;38232:78;38221:89;;38167:149;;;:::o;38322:126::-;38359:7;38399:42;38392:5;38388:54;38377:65;;38322:126;;;:::o;38454:77::-;38491:7;38520:5;38509:16;;38454:77;;;:::o;38537:109::-;38573:7;38613:26;38606:5;38602:38;38591:49;;38537:109;;;:::o;38652:154::-;38736:6;38731:3;38726;38713:30;38798:1;38789:6;38784:3;38780:16;38773:27;38652:154;;;:::o;38812:307::-;38880:1;38890:113;38904:6;38901:1;38898:13;38890:113;;;38989:1;38984:3;38980:11;38974:18;38970:1;38965:3;38961:11;38954:39;38926:2;38923:1;38919:10;38914:15;;38890:113;;;39021:6;39018:1;39015:13;39012:101;;;39101:1;39092:6;39087:3;39083:16;39076:27;39012:101;38861:258;38812:307;;;:::o;39125:320::-;39169:6;39206:1;39200:4;39196:12;39186:22;;39253:1;39247:4;39243:12;39274:18;39264:81;;39330:4;39322:6;39318:17;39308:27;;39264:81;39392:2;39384:6;39381:14;39361:18;39358:38;39355:84;;;39411:18;;:::i;:::-;39355:84;39176:269;39125:320;;;:::o;39451:281::-;39534:27;39556:4;39534:27;:::i;:::-;39526:6;39522:40;39664:6;39652:10;39649:22;39628:18;39616:10;39613:34;39610:62;39607:88;;;39675:18;;:::i;:::-;39607:88;39715:10;39711:2;39704:22;39494:238;39451:281;;:::o;39738:233::-;39777:3;39800:24;39818:5;39800:24;:::i;:::-;39791:33;;39846:66;39839:5;39836:77;39833:103;;;39916:18;;:::i;:::-;39833:103;39963:1;39956:5;39952:13;39945:20;;39738:233;;;:::o;39977:176::-;40009:1;40026:20;40044:1;40026:20;:::i;:::-;40021:25;;40060:20;40078:1;40060:20;:::i;:::-;40055:25;;40099:1;40089:35;;40104:18;;:::i;:::-;40089:35;40145:1;40142;40138:9;40133:14;;39977:176;;;;:::o;40159:180::-;40207:77;40204:1;40197:88;40304:4;40301:1;40294:15;40328:4;40325:1;40318:15;40345:180;40393:77;40390:1;40383:88;40490:4;40487:1;40480:15;40514:4;40511:1;40504:15;40531:180;40579:77;40576:1;40569:88;40676:4;40673:1;40666:15;40700:4;40697:1;40690:15;40717:180;40765:77;40762:1;40755:88;40862:4;40859:1;40852:15;40886:4;40883:1;40876:15;40903:180;40951:77;40948:1;40941:88;41048:4;41045:1;41038:15;41072:4;41069:1;41062:15;41089:117;41198:1;41195;41188:12;41212:117;41321:1;41318;41311:12;41335:117;41444:1;41441;41434:12;41458:117;41567:1;41564;41557:12;41581:117;41690:1;41687;41680:12;41704:117;41813:1;41810;41803:12;41827:102;41868:6;41919:2;41915:7;41910:2;41903:5;41899:14;41895:28;41885:38;;41827:102;;;:::o;41935:221::-;42075:34;42071:1;42063:6;42059:14;42052:58;42144:4;42139:2;42131:6;42127:15;42120:29;41935:221;:::o;42162:237::-;42302:34;42298:1;42290:6;42286:14;42279:58;42371:20;42366:2;42358:6;42354:15;42347:45;42162:237;:::o;42405:225::-;42545:34;42541:1;42533:6;42529:14;42522:58;42614:8;42609:2;42601:6;42597:15;42590:33;42405:225;:::o;42636:224::-;42776:34;42772:1;42764:6;42760:14;42753:58;42845:7;42840:2;42832:6;42828:15;42821:32;42636:224;:::o;42866:178::-;43006:30;43002:1;42994:6;42990:14;42983:54;42866:178;:::o;43050:223::-;43190:34;43186:1;43178:6;43174:14;43167:58;43259:6;43254:2;43246:6;43242:15;43235:31;43050:223;:::o;43279:175::-;43419:27;43415:1;43407:6;43403:14;43396:51;43279:175;:::o;43460:228::-;43600:34;43596:1;43588:6;43584:14;43577:58;43669:11;43664:2;43656:6;43652:15;43645:36;43460:228;:::o;43694:176::-;43834:28;43830:1;43822:6;43818:14;43811:52;43694:176;:::o;43876:249::-;44016:34;44012:1;44004:6;44000:14;43993:58;44085:32;44080:2;44072:6;44068:15;44061:57;43876:249;:::o;44131:182::-;44271:34;44267:1;44259:6;44255:14;44248:58;44131:182;:::o;44319:::-;44459:34;44455:1;44447:6;44443:14;44436:58;44319:182;:::o;44507:234::-;44647:34;44643:1;44635:6;44631:14;44624:58;44716:17;44711:2;44703:6;44699:15;44692:42;44507:234;:::o;44747:174::-;44887:26;44883:1;44875:6;44871:14;44864:50;44747:174;:::o;44927:220::-;45067:34;45063:1;45055:6;45051:14;45044:58;45136:3;45131:2;45123:6;45119:15;45112:28;44927:220;:::o;45153:114::-;;:::o;45273:170::-;45413:22;45409:1;45401:6;45397:14;45390:46;45273:170;:::o;45449:229::-;45589:34;45585:1;45577:6;45573:14;45566:58;45658:12;45653:2;45645:6;45641:15;45634:37;45449:229;:::o;45684:233::-;45824:34;45820:1;45812:6;45808:14;45801:58;45893:16;45888:2;45880:6;45876:15;45869:41;45684:233;:::o;45923:175::-;46063:27;46059:1;46051:6;46047:14;46040:51;45923:175;:::o;46104:181::-;46244:33;46240:1;46232:6;46228:14;46221:57;46104:181;:::o;46291:122::-;46364:24;46382:5;46364:24;:::i;:::-;46357:5;46354:35;46344:63;;46403:1;46400;46393:12;46344:63;46291:122;:::o;46419:116::-;46489:21;46504:5;46489:21;:::i;:::-;46482:5;46479:32;46469:60;;46525:1;46522;46515:12;46469:60;46419:116;:::o;46541:120::-;46613:23;46630:5;46613:23;:::i;:::-;46606:5;46603:34;46593:62;;46651:1;46648;46641:12;46593:62;46541:120;:::o;46667:122::-;46740:24;46758:5;46740:24;:::i;:::-;46733:5;46730:35;46720:63;;46779:1;46776;46769:12;46720:63;46667:122;:::o;46795:120::-;46867:23;46884:5;46867:23;:::i;:::-;46860:5;46857:34;46847:62;;46905:1;46902;46895:12;46847:62;46795:120;:::o
Swarm Source
ipfs://a2cefa613e35962cbbfbc17508a63341d8fa79d55f9d30cda4bc6fd8863b9482
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.