Feature Tip: Add private address tag to any address under My Name Tag !
Overview
TokenID
1
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:
DrunkenMonkeyV2
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-27 */ // 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/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/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/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: address zero is not a valid owner"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: invalid token ID"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not token owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { _requireMinted(tokenId); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner nor approved"); _safeTransfer(from, to, tokenId, data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { address owner = ERC721.ownerOf(tokenId); return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits an {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Reverts if the `tokenId` has not been minted yet. */ function _requireMinted(uint256 tokenId) internal view virtual { require(_exists(tokenId), "ERC721: invalid token ID"); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { /// @solidity memory-safe-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/contract.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.7; contract DrunkenMonkeyV2 is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 0.08 ether; uint256 public presaleCost = 0.07 ether; uint256 public maxSupply = 10000; bool public paused = false; bool public inPreSale = true; mapping(address => bool) public presaleWallets; address public seller; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, address _seller ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); seller = _seller; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function setSeller(address _seller) external onlyOwner { seller = _seller; } function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { if(inPreSale == true){ require(presaleWallets[msg.sender]); require(msg.value >= presaleCost * _mintAmount); } else{ require(msg.value >= cost * _mintAmount); } } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), baseExtension ) ) : ""; } //only owner function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setPresaleCost(uint256 _newCost) public onlyOwner { presaleCost = _newCost; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function _price() external view returns (uint) { if(inPreSale == true && presaleWallets[msg.sender] == true){ return presaleCost; } else{ return cost; } } function pause(bool _state) public onlyOwner { paused = _state; } function changePreSale() public onlyOwner { inPreSale = !inPreSale; } function addPresaleUser(address _user) public onlyOwner { presaleWallets[_user] = true; } function addMultiplePresaleUser(address[] memory _user) public onlyOwner { for (uint i = 0; i< _user.length; i++){ presaleWallets[_user[i]] = true; } } function removePresaleUser(address _user) public onlyOwner { presaleWallets[_user] = false; } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{ value: address(this).balance }(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"address","name":"_seller","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_user","type":"address[]"}],"name":"addMultiplePresaleUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"addPresaleUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changePreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inPreSale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removePresaleUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"seller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setPresaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_seller","type":"address"}],"name":"setSeller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000519291906200033f565b5067011c37937e080000600d5566f8b0a10e470000600e55612710600f556000601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff021916908315150217905550348015620000b257600080fd5b5060405162004ae438038062004ae48339818101604052810190620000d8919062000484565b83838160009080519060200190620000f29291906200033f565b5080600190805190602001906200010b9291906200033f565b5050506200012e620001226200018a60201b60201c565b6200019260201b60201c565b6200013f826200025860201b60201c565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050620007a8565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002686200028460201b60201c565b80600b9080519060200190620002809291906200033f565b5050565b620002946200018a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002ba6200031560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000313576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200030a906200057a565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200034d9062000676565b90600052602060002090601f016020900481019282620003715760008555620003bd565b82601f106200038c57805160ff1916838001178555620003bd565b82800160010185558215620003bd579182015b82811115620003bc5782518255916020019190600101906200039f565b5b509050620003cc9190620003d0565b5090565b5b80821115620003eb576000816000905550600101620003d1565b5090565b6000620004066200040084620005c5565b6200059c565b90508281526020810184848401111562000425576200042462000745565b5b6200043284828562000640565b509392505050565b6000815190506200044b816200078e565b92915050565b600082601f83011262000469576200046862000740565b5b81516200047b848260208601620003ef565b91505092915050565b60008060008060808587031215620004a157620004a06200074f565b5b600085015167ffffffffffffffff811115620004c257620004c16200074a565b5b620004d08782880162000451565b945050602085015167ffffffffffffffff811115620004f457620004f36200074a565b5b620005028782880162000451565b935050604085015167ffffffffffffffff8111156200052657620005256200074a565b5b620005348782880162000451565b925050606062000547878288016200043a565b91505092959194509250565b600062000562602083620005fb565b91506200056f8262000765565b602082019050919050565b60006020820190508181036000830152620005958162000553565b9050919050565b6000620005a8620005bb565b9050620005b68282620006ac565b919050565b6000604051905090565b600067ffffffffffffffff821115620005e357620005e262000711565b5b620005ee8262000754565b9050602081019050919050565b600082825260208201905092915050565b6000620006198262000620565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200066057808201518184015260208101905062000643565b8381111562000670576000848401525b50505050565b600060028204905060018216806200068f57607f821691505b60208210811415620006a657620006a5620006e2565b5b50919050565b620006b78262000754565b810181811067ffffffffffffffff82111715620006d957620006d862000711565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62000799816200060c565b8114620007a557600080fd5b50565b61432c80620007b86000396000f3fe6080604052600436106102515760003560e01c80636352211e11610139578063b2f3e85e116100b6578063d634961b1161007a578063d634961b146108aa578063da3ef23f146108c1578063e985e9c5146108ea578063e99d286614610927578063ed931e1714610950578063f2fde38b1461097957610251565b8063b2f3e85e146107c5578063b88d4fde146107ee578063c668286214610817578063c87b56dd14610842578063d5abeb011461087f57610251565b80638da5cb5b116100fd5780638da5cb5b146107015780638fdcf9421461072c57806395d89b4114610755578063a0712d6814610780578063a22cb4651461079c57610251565b80636352211e1461061c5780636c0360eb1461065957806370a0823114610684578063715018a6146106c15780637748f375146106d857610251565b806323b872dd116101d257806342842e0e1161019657806342842e0e146104fc578063438b63001461052557806344a0d68a146105625780634f6ccce71461058b57806355f804b3146105c85780635c975abb146105f157610251565b806323b872dd146104245780632a23d07d1461044d5780632f745c591461047857806330b2264e146104b55780633ccfd60b146104f257610251565b8063095ea7b311610219578063095ea7b31461034f57806313faede61461037857806318160ddd146103a35780631a40626b146103ce578063235b6ea1146103f957610251565b806301ffc9a71461025657806302329a291461029357806306fdde03146102bc578063081812fc146102e757806308551a5314610324575b600080fd5b34801561026257600080fd5b5061027d6004803603810190610278919061310c565b6109a2565b60405161028a91906136d2565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b591906130df565b610a1c565b005b3480156102c857600080fd5b506102d1610a41565b6040516102de91906136ed565b60405180910390f35b3480156102f357600080fd5b5061030e600480360381019061030991906131af565b610ad3565b60405161031b9190613649565b60405180910390f35b34801561033057600080fd5b50610339610b19565b6040516103469190613649565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190613056565b610b3f565b005b34801561038457600080fd5b5061038d610c57565b60405161039a919061390f565b60405180910390f35b3480156103af57600080fd5b506103b8610c5d565b6040516103c5919061390f565b60405180910390f35b3480156103da57600080fd5b506103e3610c6a565b6040516103f091906136d2565b60405180910390f35b34801561040557600080fd5b5061040e610c7d565b60405161041b919061390f565b60405180910390f35b34801561043057600080fd5b5061044b60048036038101906104469190612f40565b610d0a565b005b34801561045957600080fd5b50610462610d6a565b60405161046f919061390f565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190613056565b610d70565b6040516104ac919061390f565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190612ed3565b610e15565b6040516104e991906136d2565b60405180910390f35b6104fa610e35565b005b34801561050857600080fd5b50610523600480360381019061051e9190612f40565b610eb6565b005b34801561053157600080fd5b5061054c60048036038101906105479190612ed3565b610ed6565b60405161055991906136b0565b60405180910390f35b34801561056e57600080fd5b50610589600480360381019061058491906131af565b610f84565b005b34801561059757600080fd5b506105b260048036038101906105ad91906131af565b610f96565b6040516105bf919061390f565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190613166565b611007565b005b3480156105fd57600080fd5b50610606611029565b60405161061391906136d2565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e91906131af565b61103c565b6040516106509190613649565b60405180910390f35b34801561066557600080fd5b5061066e6110ee565b60405161067b91906136ed565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190612ed3565b61117c565b6040516106b8919061390f565b60405180910390f35b3480156106cd57600080fd5b506106d6611234565b005b3480156106e457600080fd5b506106ff60048036038101906106fa9190613096565b611248565b005b34801561070d57600080fd5b506107166112e5565b6040516107239190613649565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e91906131af565b61130f565b005b34801561076157600080fd5b5061076a611321565b60405161077791906136ed565b60405180910390f35b61079a600480360381019061079591906131af565b6113b3565b005b3480156107a857600080fd5b506107c360048036038101906107be9190613016565b611522565b005b3480156107d157600080fd5b506107ec60048036038101906107e79190612ed3565b611538565b005b3480156107fa57600080fd5b5061081560048036038101906108109190612f93565b61159b565b005b34801561082357600080fd5b5061082c6115fd565b60405161083991906136ed565b60405180910390f35b34801561084e57600080fd5b50610869600480360381019061086491906131af565b61168b565b60405161087691906136ed565b60405180910390f35b34801561088b57600080fd5b50610894611735565b6040516108a1919061390f565b60405180910390f35b3480156108b657600080fd5b506108bf61173b565b005b3480156108cd57600080fd5b506108e860048036038101906108e39190613166565b61176f565b005b3480156108f657600080fd5b50610911600480360381019061090c9190612f00565b611791565b60405161091e91906136d2565b60405180910390f35b34801561093357600080fd5b5061094e60048036038101906109499190612ed3565b611825565b005b34801561095c57600080fd5b5061097760048036038101906109729190612ed3565b611871565b005b34801561098557600080fd5b506109a0600480360381019061099b9190612ed3565b6118d4565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a155750610a1482611958565b5b9050919050565b610a24611a3a565b80601060006101000a81548160ff02191690831515021790555050565b606060008054610a5090613c44565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7c90613c44565b8015610ac95780601f10610a9e57610100808354040283529160200191610ac9565b820191906000526020600020905b815481529060010190602001808311610aac57829003601f168201915b5050505050905090565b6000610ade82611ab8565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610b4a8261103c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb2906138af565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bda611b03565b73ffffffffffffffffffffffffffffffffffffffff161480610c095750610c0881610c03611b03565b611791565b5b610c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3f9061380f565b60405180910390fd5b610c528383611b0b565b505050565b600d5481565b6000600880549050905090565b601060019054906101000a900460ff1681565b600060011515601060019054906101000a900460ff161515148015610cf2575060011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15610d0157600e549050610d07565b600d5490505b90565b610d1b610d15611b03565b82611bc4565b610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d51906138ef565b60405180910390fd5b610d65838383611c59565b505050565b600e5481565b6000610d7b8361117c565b8210610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db39061370f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60116020528060005260406000206000915054906101000a900460ff1681565b610e3d611a3a565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e6390613634565b60006040518083038185875af1925050503d8060008114610ea0576040519150601f19603f3d011682016040523d82523d6000602084013e610ea5565b606091505b5050905080610eb357600080fd5b50565b610ed18383836040518060200160405280600081525061159b565b505050565b60606000610ee38361117c565b905060008167ffffffffffffffff811115610f0157610f00613e0c565b5b604051908082528060200260200182016040528015610f2f5781602001602082028036833780820191505090505b50905060005b82811015610f7957610f478582610d70565b828281518110610f5a57610f59613ddd565b5b6020026020010181815250508080610f7190613ca7565b915050610f35565b508092505050919050565b610f8c611a3a565b80600d8190555050565b6000610fa0610c5d565b8210610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd8906138cf565b60405180910390fd5b60088281548110610ff557610ff4613ddd565b5b90600052602060002001549050919050565b61100f611a3a565b80600b9080519060200190611025929190612c49565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc9061388f565b60405180910390fd5b80915050919050565b600b80546110fb90613c44565b80601f016020809104026020016040519081016040528092919081815260200182805461112790613c44565b80156111745780601f1061114957610100808354040283529160200191611174565b820191906000526020600020905b81548152906001019060200180831161115757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e4906137ef565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61123c611a3a565b6112466000611ec0565b565b611250611a3a565b60005b81518110156112e15760016011600084848151811061127557611274613ddd565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806112d990613ca7565b915050611253565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611317611a3a565b80600e8190555050565b60606001805461133090613c44565b80601f016020809104026020016040519081016040528092919081815260200182805461135c90613c44565b80156113a95780601f1061137e576101008083540402835291602001916113a9565b820191906000526020600020905b81548152906001019060200180831161138c57829003601f168201915b5050505050905090565b60006113bd610c5d565b9050601060009054906101000a900460ff16156113d957600080fd5b600082116113e657600080fd5b600f5482826113f59190613a79565b111561140057600080fd5b6114086112e5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114e75760011515601060019054906101000a900460ff16151514156114cb57601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114ac57600080fd5b81600e546114ba9190613b00565b3410156114c657600080fd5b6114e6565b81600d546114d99190613b00565b3410156114e557600080fd5b5b5b6000600190505b82811161151d5761150a3382846115059190613a79565b611f86565b808061151590613ca7565b9150506114ee565b505050565b61153461152d611b03565b8383611fa4565b5050565b611540611a3a565b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115ac6115a6611b03565b83611bc4565b6115eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e2906138ef565b60405180910390fd5b6115f784848484612111565b50505050565b600c805461160a90613c44565b80601f016020809104026020016040519081016040528092919081815260200182805461163690613c44565b80156116835780601f1061165857610100808354040283529160200191611683565b820191906000526020600020905b81548152906001019060200180831161166657829003601f168201915b505050505081565b60606116968261216d565b6116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc9061386f565b60405180910390fd5b60006116df6121d9565b905060008151116116ff576040518060200160405280600081525061172d565b806117098461226b565b600c60405160200161171d93929190613603565b6040516020818303038152906040525b915050919050565b600f5481565b611743611a3a565b601060019054906101000a900460ff1615601060016101000a81548160ff021916908315150217905550565b611777611a3a565b80600c908051906020019061178d929190612c49565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61182d611a3a565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611879611a3a565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6118dc611a3a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561194c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119439061374f565b60405180910390fd5b61195581611ec0565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a2357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a335750611a32826123cc565b5b9050919050565b611a42611b03565b73ffffffffffffffffffffffffffffffffffffffff16611a606112e5565b73ffffffffffffffffffffffffffffffffffffffff1614611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad9061384f565b60405180910390fd5b565b611ac18161216d565b611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af79061388f565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b7e8361103c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611bd08361103c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c125750611c118185611791565b5b80611c5057508373ffffffffffffffffffffffffffffffffffffffff16611c3884610ad3565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c798261103c565b73ffffffffffffffffffffffffffffffffffffffff1614611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc69061376f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d36906137af565b60405180910390fd5b611d4a838383612436565b611d55600082611b0b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611da59190613b5a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dfc9190613a79565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ebb83838361254a565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611fa082826040518060200160405280600081525061254f565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a906137cf565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161210491906136d2565b60405180910390a3505050565b61211c848484611c59565b612128848484846125aa565b612167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215e9061372f565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b80546121e890613c44565b80601f016020809104026020016040519081016040528092919081815260200182805461221490613c44565b80156122615780601f1061223657610100808354040283529160200191612261565b820191906000526020600020905b81548152906001019060200180831161224457829003601f168201915b5050505050905090565b606060008214156122b3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123c7565b600082905060005b600082146122e55780806122ce90613ca7565b915050600a826122de9190613acf565b91506122bb565b60008167ffffffffffffffff81111561230157612300613e0c565b5b6040519080825280601f01601f1916602001820160405280156123335781602001600182028036833780820191505090505b5090505b600085146123c05760018261234c9190613b5a565b9150600a8561235b9190613cf0565b60306123679190613a79565b60f81b81838151811061237d5761237c613ddd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123b99190613acf565b9450612337565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612441838383612741565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124845761247f81612746565b6124c3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146124c2576124c1838261278f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561250657612501816128fc565b612545565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146125445761254382826129cd565b5b5b505050565b505050565b6125598383612a4c565b61256660008484846125aa565b6125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259c9061372f565b60405180910390fd5b505050565b60006125cb8473ffffffffffffffffffffffffffffffffffffffff16612c26565b15612734578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125f4611b03565b8786866040518563ffffffff1660e01b81526004016126169493929190613664565b602060405180830381600087803b15801561263057600080fd5b505af192505050801561266157506040513d601f19601f8201168201806040525081019061265e9190613139565b60015b6126e4573d8060008114612691576040519150601f19603f3d011682016040523d82523d6000602084013e612696565b606091505b506000815114156126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d39061372f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612739565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161279c8461117c565b6127a69190613b5a565b905060006007600084815260200190815260200160002054905081811461288b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129109190613b5a565b90506000600960008481526020019081526020016000205490506000600883815481106129405761293f613ddd565b5b90600052602060002001549050806008838154811061296257612961613ddd565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806129b1576129b0613dae565b5b6001900381819060005260206000200160009055905550505050565b60006129d88361117c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab39061382f565b60405180910390fd5b612ac58161216d565b15612b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afc9061378f565b60405180910390fd5b612b1160008383612436565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b619190613a79565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c226000838361254a565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612c5590613c44565b90600052602060002090601f016020900481019282612c775760008555612cbe565b82601f10612c9057805160ff1916838001178555612cbe565b82800160010185558215612cbe579182015b82811115612cbd578251825591602001919060010190612ca2565b5b509050612ccb9190612ccf565b5090565b5b80821115612ce8576000816000905550600101612cd0565b5090565b6000612cff612cfa8461394f565b61392a565b90508083825260208201905082856020860282011115612d2257612d21613e40565b5b60005b85811015612d525781612d388882612de0565b845260208401935060208301925050600181019050612d25565b5050509392505050565b6000612d6f612d6a8461397b565b61392a565b905082815260208101848484011115612d8b57612d8a613e45565b5b612d96848285613c02565b509392505050565b6000612db1612dac846139ac565b61392a565b905082815260208101848484011115612dcd57612dcc613e45565b5b612dd8848285613c02565b509392505050565b600081359050612def8161429a565b92915050565b600082601f830112612e0a57612e09613e3b565b5b8135612e1a848260208601612cec565b91505092915050565b600081359050612e32816142b1565b92915050565b600081359050612e47816142c8565b92915050565b600081519050612e5c816142c8565b92915050565b600082601f830112612e7757612e76613e3b565b5b8135612e87848260208601612d5c565b91505092915050565b600082601f830112612ea557612ea4613e3b565b5b8135612eb5848260208601612d9e565b91505092915050565b600081359050612ecd816142df565b92915050565b600060208284031215612ee957612ee8613e4f565b5b6000612ef784828501612de0565b91505092915050565b60008060408385031215612f1757612f16613e4f565b5b6000612f2585828601612de0565b9250506020612f3685828601612de0565b9150509250929050565b600080600060608486031215612f5957612f58613e4f565b5b6000612f6786828701612de0565b9350506020612f7886828701612de0565b9250506040612f8986828701612ebe565b9150509250925092565b60008060008060808587031215612fad57612fac613e4f565b5b6000612fbb87828801612de0565b9450506020612fcc87828801612de0565b9350506040612fdd87828801612ebe565b925050606085013567ffffffffffffffff811115612ffe57612ffd613e4a565b5b61300a87828801612e62565b91505092959194509250565b6000806040838503121561302d5761302c613e4f565b5b600061303b85828601612de0565b925050602061304c85828601612e23565b9150509250929050565b6000806040838503121561306d5761306c613e4f565b5b600061307b85828601612de0565b925050602061308c85828601612ebe565b9150509250929050565b6000602082840312156130ac576130ab613e4f565b5b600082013567ffffffffffffffff8111156130ca576130c9613e4a565b5b6130d684828501612df5565b91505092915050565b6000602082840312156130f5576130f4613e4f565b5b600061310384828501612e23565b91505092915050565b60006020828403121561312257613121613e4f565b5b600061313084828501612e38565b91505092915050565b60006020828403121561314f5761314e613e4f565b5b600061315d84828501612e4d565b91505092915050565b60006020828403121561317c5761317b613e4f565b5b600082013567ffffffffffffffff81111561319a57613199613e4a565b5b6131a684828501612e90565b91505092915050565b6000602082840312156131c5576131c4613e4f565b5b60006131d384828501612ebe565b91505092915050565b60006131e883836135e5565b60208301905092915050565b6131fd81613b8e565b82525050565b600061320e82613a02565b6132188185613a30565b9350613223836139dd565b8060005b8381101561325457815161323b88826131dc565b975061324683613a23565b925050600181019050613227565b5085935050505092915050565b61326a81613ba0565b82525050565b600061327b82613a0d565b6132858185613a41565b9350613295818560208601613c11565b61329e81613e54565b840191505092915050565b60006132b482613a18565b6132be8185613a5d565b93506132ce818560208601613c11565b6132d781613e54565b840191505092915050565b60006132ed82613a18565b6132f78185613a6e565b9350613307818560208601613c11565b80840191505092915050565b6000815461332081613c44565b61332a8186613a6e565b94506001821660008114613345576001811461335657613389565b60ff19831686528186019350613389565b61335f856139ed565b60005b8381101561338157815481890152600182019150602081019050613362565b838801955050505b50505092915050565b600061339f602b83613a5d565b91506133aa82613e65565b604082019050919050565b60006133c2603283613a5d565b91506133cd82613eb4565b604082019050919050565b60006133e5602683613a5d565b91506133f082613f03565b604082019050919050565b6000613408602583613a5d565b915061341382613f52565b604082019050919050565b600061342b601c83613a5d565b915061343682613fa1565b602082019050919050565b600061344e602483613a5d565b915061345982613fca565b604082019050919050565b6000613471601983613a5d565b915061347c82614019565b602082019050919050565b6000613494602983613a5d565b915061349f82614042565b604082019050919050565b60006134b7603e83613a5d565b91506134c282614091565b604082019050919050565b60006134da602083613a5d565b91506134e5826140e0565b602082019050919050565b60006134fd602083613a5d565b915061350882614109565b602082019050919050565b6000613520602f83613a5d565b915061352b82614132565b604082019050919050565b6000613543601883613a5d565b915061354e82614181565b602082019050919050565b6000613566602183613a5d565b9150613571826141aa565b604082019050919050565b6000613589600083613a52565b9150613594826141f9565b600082019050919050565b60006135ac602c83613a5d565b91506135b7826141fc565b604082019050919050565b60006135cf602e83613a5d565b91506135da8261424b565b604082019050919050565b6135ee81613bf8565b82525050565b6135fd81613bf8565b82525050565b600061360f82866132e2565b915061361b82856132e2565b91506136278284613313565b9150819050949350505050565b600061363f8261357c565b9150819050919050565b600060208201905061365e60008301846131f4565b92915050565b600060808201905061367960008301876131f4565b61368660208301866131f4565b61369360408301856135f4565b81810360608301526136a58184613270565b905095945050505050565b600060208201905081810360008301526136ca8184613203565b905092915050565b60006020820190506136e76000830184613261565b92915050565b6000602082019050818103600083015261370781846132a9565b905092915050565b6000602082019050818103600083015261372881613392565b9050919050565b60006020820190508181036000830152613748816133b5565b9050919050565b60006020820190508181036000830152613768816133d8565b9050919050565b60006020820190508181036000830152613788816133fb565b9050919050565b600060208201905081810360008301526137a88161341e565b9050919050565b600060208201905081810360008301526137c881613441565b9050919050565b600060208201905081810360008301526137e881613464565b9050919050565b6000602082019050818103600083015261380881613487565b9050919050565b60006020820190508181036000830152613828816134aa565b9050919050565b60006020820190508181036000830152613848816134cd565b9050919050565b60006020820190508181036000830152613868816134f0565b9050919050565b6000602082019050818103600083015261388881613513565b9050919050565b600060208201905081810360008301526138a881613536565b9050919050565b600060208201905081810360008301526138c881613559565b9050919050565b600060208201905081810360008301526138e88161359f565b9050919050565b60006020820190508181036000830152613908816135c2565b9050919050565b600060208201905061392460008301846135f4565b92915050565b6000613934613945565b90506139408282613c76565b919050565b6000604051905090565b600067ffffffffffffffff82111561396a57613969613e0c565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561399657613995613e0c565b5b61399f82613e54565b9050602081019050919050565b600067ffffffffffffffff8211156139c7576139c6613e0c565b5b6139d082613e54565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a8482613bf8565b9150613a8f83613bf8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ac457613ac3613d21565b5b828201905092915050565b6000613ada82613bf8565b9150613ae583613bf8565b925082613af557613af4613d50565b5b828204905092915050565b6000613b0b82613bf8565b9150613b1683613bf8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b4f57613b4e613d21565b5b828202905092915050565b6000613b6582613bf8565b9150613b7083613bf8565b925082821015613b8357613b82613d21565b5b828203905092915050565b6000613b9982613bd8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c2f578082015181840152602081019050613c14565b83811115613c3e576000848401525b50505050565b60006002820490506001821680613c5c57607f821691505b60208210811415613c7057613c6f613d7f565b5b50919050565b613c7f82613e54565b810181811067ffffffffffffffff82111715613c9e57613c9d613e0c565b5b80604052505050565b6000613cb282613bf8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ce557613ce4613d21565b5b600182019050919050565b6000613cfb82613bf8565b9150613d0683613bf8565b925082613d1657613d15613d50565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6142a381613b8e565b81146142ae57600080fd5b50565b6142ba81613ba0565b81146142c557600080fd5b50565b6142d181613bac565b81146142dc57600080fd5b50565b6142e881613bf8565b81146142f357600080fd5b5056fea2646970667358221220afb0178e888bb9f5c6e30fdf6bcd83fdde1e1d882f25c36b886553f1f084fae764736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000a44eef05d8c9a76a62e3c6be38f0b9dee2709930000000000000000000000000000000000000000000000000000000000000000f4472756e6b656e4d6f6e6b6579563200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005444d5356320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102515760003560e01c80636352211e11610139578063b2f3e85e116100b6578063d634961b1161007a578063d634961b146108aa578063da3ef23f146108c1578063e985e9c5146108ea578063e99d286614610927578063ed931e1714610950578063f2fde38b1461097957610251565b8063b2f3e85e146107c5578063b88d4fde146107ee578063c668286214610817578063c87b56dd14610842578063d5abeb011461087f57610251565b80638da5cb5b116100fd5780638da5cb5b146107015780638fdcf9421461072c57806395d89b4114610755578063a0712d6814610780578063a22cb4651461079c57610251565b80636352211e1461061c5780636c0360eb1461065957806370a0823114610684578063715018a6146106c15780637748f375146106d857610251565b806323b872dd116101d257806342842e0e1161019657806342842e0e146104fc578063438b63001461052557806344a0d68a146105625780634f6ccce71461058b57806355f804b3146105c85780635c975abb146105f157610251565b806323b872dd146104245780632a23d07d1461044d5780632f745c591461047857806330b2264e146104b55780633ccfd60b146104f257610251565b8063095ea7b311610219578063095ea7b31461034f57806313faede61461037857806318160ddd146103a35780631a40626b146103ce578063235b6ea1146103f957610251565b806301ffc9a71461025657806302329a291461029357806306fdde03146102bc578063081812fc146102e757806308551a5314610324575b600080fd5b34801561026257600080fd5b5061027d6004803603810190610278919061310c565b6109a2565b60405161028a91906136d2565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b591906130df565b610a1c565b005b3480156102c857600080fd5b506102d1610a41565b6040516102de91906136ed565b60405180910390f35b3480156102f357600080fd5b5061030e600480360381019061030991906131af565b610ad3565b60405161031b9190613649565b60405180910390f35b34801561033057600080fd5b50610339610b19565b6040516103469190613649565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190613056565b610b3f565b005b34801561038457600080fd5b5061038d610c57565b60405161039a919061390f565b60405180910390f35b3480156103af57600080fd5b506103b8610c5d565b6040516103c5919061390f565b60405180910390f35b3480156103da57600080fd5b506103e3610c6a565b6040516103f091906136d2565b60405180910390f35b34801561040557600080fd5b5061040e610c7d565b60405161041b919061390f565b60405180910390f35b34801561043057600080fd5b5061044b60048036038101906104469190612f40565b610d0a565b005b34801561045957600080fd5b50610462610d6a565b60405161046f919061390f565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190613056565b610d70565b6040516104ac919061390f565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d79190612ed3565b610e15565b6040516104e991906136d2565b60405180910390f35b6104fa610e35565b005b34801561050857600080fd5b50610523600480360381019061051e9190612f40565b610eb6565b005b34801561053157600080fd5b5061054c60048036038101906105479190612ed3565b610ed6565b60405161055991906136b0565b60405180910390f35b34801561056e57600080fd5b50610589600480360381019061058491906131af565b610f84565b005b34801561059757600080fd5b506105b260048036038101906105ad91906131af565b610f96565b6040516105bf919061390f565b60405180910390f35b3480156105d457600080fd5b506105ef60048036038101906105ea9190613166565b611007565b005b3480156105fd57600080fd5b50610606611029565b60405161061391906136d2565b60405180910390f35b34801561062857600080fd5b50610643600480360381019061063e91906131af565b61103c565b6040516106509190613649565b60405180910390f35b34801561066557600080fd5b5061066e6110ee565b60405161067b91906136ed565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190612ed3565b61117c565b6040516106b8919061390f565b60405180910390f35b3480156106cd57600080fd5b506106d6611234565b005b3480156106e457600080fd5b506106ff60048036038101906106fa9190613096565b611248565b005b34801561070d57600080fd5b506107166112e5565b6040516107239190613649565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e91906131af565b61130f565b005b34801561076157600080fd5b5061076a611321565b60405161077791906136ed565b60405180910390f35b61079a600480360381019061079591906131af565b6113b3565b005b3480156107a857600080fd5b506107c360048036038101906107be9190613016565b611522565b005b3480156107d157600080fd5b506107ec60048036038101906107e79190612ed3565b611538565b005b3480156107fa57600080fd5b5061081560048036038101906108109190612f93565b61159b565b005b34801561082357600080fd5b5061082c6115fd565b60405161083991906136ed565b60405180910390f35b34801561084e57600080fd5b50610869600480360381019061086491906131af565b61168b565b60405161087691906136ed565b60405180910390f35b34801561088b57600080fd5b50610894611735565b6040516108a1919061390f565b60405180910390f35b3480156108b657600080fd5b506108bf61173b565b005b3480156108cd57600080fd5b506108e860048036038101906108e39190613166565b61176f565b005b3480156108f657600080fd5b50610911600480360381019061090c9190612f00565b611791565b60405161091e91906136d2565b60405180910390f35b34801561093357600080fd5b5061094e60048036038101906109499190612ed3565b611825565b005b34801561095c57600080fd5b5061097760048036038101906109729190612ed3565b611871565b005b34801561098557600080fd5b506109a0600480360381019061099b9190612ed3565b6118d4565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a155750610a1482611958565b5b9050919050565b610a24611a3a565b80601060006101000a81548160ff02191690831515021790555050565b606060008054610a5090613c44565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7c90613c44565b8015610ac95780601f10610a9e57610100808354040283529160200191610ac9565b820191906000526020600020905b815481529060010190602001808311610aac57829003601f168201915b5050505050905090565b6000610ade82611ab8565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610b4a8261103c565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb2906138af565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bda611b03565b73ffffffffffffffffffffffffffffffffffffffff161480610c095750610c0881610c03611b03565b611791565b5b610c48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3f9061380f565b60405180910390fd5b610c528383611b0b565b505050565b600d5481565b6000600880549050905090565b601060019054906101000a900460ff1681565b600060011515601060019054906101000a900460ff161515148015610cf2575060011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15610d0157600e549050610d07565b600d5490505b90565b610d1b610d15611b03565b82611bc4565b610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d51906138ef565b60405180910390fd5b610d65838383611c59565b505050565b600e5481565b6000610d7b8361117c565b8210610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db39061370f565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60116020528060005260406000206000915054906101000a900460ff1681565b610e3d611a3a565b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610e6390613634565b60006040518083038185875af1925050503d8060008114610ea0576040519150601f19603f3d011682016040523d82523d6000602084013e610ea5565b606091505b5050905080610eb357600080fd5b50565b610ed18383836040518060200160405280600081525061159b565b505050565b60606000610ee38361117c565b905060008167ffffffffffffffff811115610f0157610f00613e0c565b5b604051908082528060200260200182016040528015610f2f5781602001602082028036833780820191505090505b50905060005b82811015610f7957610f478582610d70565b828281518110610f5a57610f59613ddd565b5b6020026020010181815250508080610f7190613ca7565b915050610f35565b508092505050919050565b610f8c611a3a565b80600d8190555050565b6000610fa0610c5d565b8210610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd8906138cf565b60405180910390fd5b60088281548110610ff557610ff4613ddd565b5b90600052602060002001549050919050565b61100f611a3a565b80600b9080519060200190611025929190612c49565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc9061388f565b60405180910390fd5b80915050919050565b600b80546110fb90613c44565b80601f016020809104026020016040519081016040528092919081815260200182805461112790613c44565b80156111745780601f1061114957610100808354040283529160200191611174565b820191906000526020600020905b81548152906001019060200180831161115757829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e4906137ef565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61123c611a3a565b6112466000611ec0565b565b611250611a3a565b60005b81518110156112e15760016011600084848151811061127557611274613ddd565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806112d990613ca7565b915050611253565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611317611a3a565b80600e8190555050565b60606001805461133090613c44565b80601f016020809104026020016040519081016040528092919081815260200182805461135c90613c44565b80156113a95780601f1061137e576101008083540402835291602001916113a9565b820191906000526020600020905b81548152906001019060200180831161138c57829003601f168201915b5050505050905090565b60006113bd610c5d565b9050601060009054906101000a900460ff16156113d957600080fd5b600082116113e657600080fd5b600f5482826113f59190613a79565b111561140057600080fd5b6114086112e5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114e75760011515601060019054906101000a900460ff16151514156114cb57601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114ac57600080fd5b81600e546114ba9190613b00565b3410156114c657600080fd5b6114e6565b81600d546114d99190613b00565b3410156114e557600080fd5b5b5b6000600190505b82811161151d5761150a3382846115059190613a79565b611f86565b808061151590613ca7565b9150506114ee565b505050565b61153461152d611b03565b8383611fa4565b5050565b611540611a3a565b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115ac6115a6611b03565b83611bc4565b6115eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e2906138ef565b60405180910390fd5b6115f784848484612111565b50505050565b600c805461160a90613c44565b80601f016020809104026020016040519081016040528092919081815260200182805461163690613c44565b80156116835780601f1061165857610100808354040283529160200191611683565b820191906000526020600020905b81548152906001019060200180831161166657829003601f168201915b505050505081565b60606116968261216d565b6116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc9061386f565b60405180910390fd5b60006116df6121d9565b905060008151116116ff576040518060200160405280600081525061172d565b806117098461226b565b600c60405160200161171d93929190613603565b6040516020818303038152906040525b915050919050565b600f5481565b611743611a3a565b601060019054906101000a900460ff1615601060016101000a81548160ff021916908315150217905550565b611777611a3a565b80600c908051906020019061178d929190612c49565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61182d611a3a565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611879611a3a565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6118dc611a3a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561194c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119439061374f565b60405180910390fd5b61195581611ec0565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a2357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a335750611a32826123cc565b5b9050919050565b611a42611b03565b73ffffffffffffffffffffffffffffffffffffffff16611a606112e5565b73ffffffffffffffffffffffffffffffffffffffff1614611ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aad9061384f565b60405180910390fd5b565b611ac18161216d565b611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af79061388f565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b7e8361103c565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611bd08361103c565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c125750611c118185611791565b5b80611c5057508373ffffffffffffffffffffffffffffffffffffffff16611c3884610ad3565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c798261103c565b73ffffffffffffffffffffffffffffffffffffffff1614611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc69061376f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d36906137af565b60405180910390fd5b611d4a838383612436565b611d55600082611b0b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611da59190613b5a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dfc9190613a79565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611ebb83838361254a565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611fa082826040518060200160405280600081525061254f565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200a906137cf565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161210491906136d2565b60405180910390a3505050565b61211c848484611c59565b612128848484846125aa565b612167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215e9061372f565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600b80546121e890613c44565b80601f016020809104026020016040519081016040528092919081815260200182805461221490613c44565b80156122615780601f1061223657610100808354040283529160200191612261565b820191906000526020600020905b81548152906001019060200180831161224457829003601f168201915b5050505050905090565b606060008214156122b3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123c7565b600082905060005b600082146122e55780806122ce90613ca7565b915050600a826122de9190613acf565b91506122bb565b60008167ffffffffffffffff81111561230157612300613e0c565b5b6040519080825280601f01601f1916602001820160405280156123335781602001600182028036833780820191505090505b5090505b600085146123c05760018261234c9190613b5a565b9150600a8561235b9190613cf0565b60306123679190613a79565b60f81b81838151811061237d5761237c613ddd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123b99190613acf565b9450612337565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612441838383612741565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124845761247f81612746565b6124c3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146124c2576124c1838261278f565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561250657612501816128fc565b612545565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146125445761254382826129cd565b5b5b505050565b505050565b6125598383612a4c565b61256660008484846125aa565b6125a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259c9061372f565b60405180910390fd5b505050565b60006125cb8473ffffffffffffffffffffffffffffffffffffffff16612c26565b15612734578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125f4611b03565b8786866040518563ffffffff1660e01b81526004016126169493929190613664565b602060405180830381600087803b15801561263057600080fd5b505af192505050801561266157506040513d601f19601f8201168201806040525081019061265e9190613139565b60015b6126e4573d8060008114612691576040519150601f19603f3d011682016040523d82523d6000602084013e612696565b606091505b506000815114156126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d39061372f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612739565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161279c8461117c565b6127a69190613b5a565b905060006007600084815260200190815260200160002054905081811461288b576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129109190613b5a565b90506000600960008481526020019081526020016000205490506000600883815481106129405761293f613ddd565b5b90600052602060002001549050806008838154811061296257612961613ddd565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806129b1576129b0613dae565b5b6001900381819060005260206000200160009055905550505050565b60006129d88361117c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab39061382f565b60405180910390fd5b612ac58161216d565b15612b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612afc9061378f565b60405180910390fd5b612b1160008383612436565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b619190613a79565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c226000838361254a565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612c5590613c44565b90600052602060002090601f016020900481019282612c775760008555612cbe565b82601f10612c9057805160ff1916838001178555612cbe565b82800160010185558215612cbe579182015b82811115612cbd578251825591602001919060010190612ca2565b5b509050612ccb9190612ccf565b5090565b5b80821115612ce8576000816000905550600101612cd0565b5090565b6000612cff612cfa8461394f565b61392a565b90508083825260208201905082856020860282011115612d2257612d21613e40565b5b60005b85811015612d525781612d388882612de0565b845260208401935060208301925050600181019050612d25565b5050509392505050565b6000612d6f612d6a8461397b565b61392a565b905082815260208101848484011115612d8b57612d8a613e45565b5b612d96848285613c02565b509392505050565b6000612db1612dac846139ac565b61392a565b905082815260208101848484011115612dcd57612dcc613e45565b5b612dd8848285613c02565b509392505050565b600081359050612def8161429a565b92915050565b600082601f830112612e0a57612e09613e3b565b5b8135612e1a848260208601612cec565b91505092915050565b600081359050612e32816142b1565b92915050565b600081359050612e47816142c8565b92915050565b600081519050612e5c816142c8565b92915050565b600082601f830112612e7757612e76613e3b565b5b8135612e87848260208601612d5c565b91505092915050565b600082601f830112612ea557612ea4613e3b565b5b8135612eb5848260208601612d9e565b91505092915050565b600081359050612ecd816142df565b92915050565b600060208284031215612ee957612ee8613e4f565b5b6000612ef784828501612de0565b91505092915050565b60008060408385031215612f1757612f16613e4f565b5b6000612f2585828601612de0565b9250506020612f3685828601612de0565b9150509250929050565b600080600060608486031215612f5957612f58613e4f565b5b6000612f6786828701612de0565b9350506020612f7886828701612de0565b9250506040612f8986828701612ebe565b9150509250925092565b60008060008060808587031215612fad57612fac613e4f565b5b6000612fbb87828801612de0565b9450506020612fcc87828801612de0565b9350506040612fdd87828801612ebe565b925050606085013567ffffffffffffffff811115612ffe57612ffd613e4a565b5b61300a87828801612e62565b91505092959194509250565b6000806040838503121561302d5761302c613e4f565b5b600061303b85828601612de0565b925050602061304c85828601612e23565b9150509250929050565b6000806040838503121561306d5761306c613e4f565b5b600061307b85828601612de0565b925050602061308c85828601612ebe565b9150509250929050565b6000602082840312156130ac576130ab613e4f565b5b600082013567ffffffffffffffff8111156130ca576130c9613e4a565b5b6130d684828501612df5565b91505092915050565b6000602082840312156130f5576130f4613e4f565b5b600061310384828501612e23565b91505092915050565b60006020828403121561312257613121613e4f565b5b600061313084828501612e38565b91505092915050565b60006020828403121561314f5761314e613e4f565b5b600061315d84828501612e4d565b91505092915050565b60006020828403121561317c5761317b613e4f565b5b600082013567ffffffffffffffff81111561319a57613199613e4a565b5b6131a684828501612e90565b91505092915050565b6000602082840312156131c5576131c4613e4f565b5b60006131d384828501612ebe565b91505092915050565b60006131e883836135e5565b60208301905092915050565b6131fd81613b8e565b82525050565b600061320e82613a02565b6132188185613a30565b9350613223836139dd565b8060005b8381101561325457815161323b88826131dc565b975061324683613a23565b925050600181019050613227565b5085935050505092915050565b61326a81613ba0565b82525050565b600061327b82613a0d565b6132858185613a41565b9350613295818560208601613c11565b61329e81613e54565b840191505092915050565b60006132b482613a18565b6132be8185613a5d565b93506132ce818560208601613c11565b6132d781613e54565b840191505092915050565b60006132ed82613a18565b6132f78185613a6e565b9350613307818560208601613c11565b80840191505092915050565b6000815461332081613c44565b61332a8186613a6e565b94506001821660008114613345576001811461335657613389565b60ff19831686528186019350613389565b61335f856139ed565b60005b8381101561338157815481890152600182019150602081019050613362565b838801955050505b50505092915050565b600061339f602b83613a5d565b91506133aa82613e65565b604082019050919050565b60006133c2603283613a5d565b91506133cd82613eb4565b604082019050919050565b60006133e5602683613a5d565b91506133f082613f03565b604082019050919050565b6000613408602583613a5d565b915061341382613f52565b604082019050919050565b600061342b601c83613a5d565b915061343682613fa1565b602082019050919050565b600061344e602483613a5d565b915061345982613fca565b604082019050919050565b6000613471601983613a5d565b915061347c82614019565b602082019050919050565b6000613494602983613a5d565b915061349f82614042565b604082019050919050565b60006134b7603e83613a5d565b91506134c282614091565b604082019050919050565b60006134da602083613a5d565b91506134e5826140e0565b602082019050919050565b60006134fd602083613a5d565b915061350882614109565b602082019050919050565b6000613520602f83613a5d565b915061352b82614132565b604082019050919050565b6000613543601883613a5d565b915061354e82614181565b602082019050919050565b6000613566602183613a5d565b9150613571826141aa565b604082019050919050565b6000613589600083613a52565b9150613594826141f9565b600082019050919050565b60006135ac602c83613a5d565b91506135b7826141fc565b604082019050919050565b60006135cf602e83613a5d565b91506135da8261424b565b604082019050919050565b6135ee81613bf8565b82525050565b6135fd81613bf8565b82525050565b600061360f82866132e2565b915061361b82856132e2565b91506136278284613313565b9150819050949350505050565b600061363f8261357c565b9150819050919050565b600060208201905061365e60008301846131f4565b92915050565b600060808201905061367960008301876131f4565b61368660208301866131f4565b61369360408301856135f4565b81810360608301526136a58184613270565b905095945050505050565b600060208201905081810360008301526136ca8184613203565b905092915050565b60006020820190506136e76000830184613261565b92915050565b6000602082019050818103600083015261370781846132a9565b905092915050565b6000602082019050818103600083015261372881613392565b9050919050565b60006020820190508181036000830152613748816133b5565b9050919050565b60006020820190508181036000830152613768816133d8565b9050919050565b60006020820190508181036000830152613788816133fb565b9050919050565b600060208201905081810360008301526137a88161341e565b9050919050565b600060208201905081810360008301526137c881613441565b9050919050565b600060208201905081810360008301526137e881613464565b9050919050565b6000602082019050818103600083015261380881613487565b9050919050565b60006020820190508181036000830152613828816134aa565b9050919050565b60006020820190508181036000830152613848816134cd565b9050919050565b60006020820190508181036000830152613868816134f0565b9050919050565b6000602082019050818103600083015261388881613513565b9050919050565b600060208201905081810360008301526138a881613536565b9050919050565b600060208201905081810360008301526138c881613559565b9050919050565b600060208201905081810360008301526138e88161359f565b9050919050565b60006020820190508181036000830152613908816135c2565b9050919050565b600060208201905061392460008301846135f4565b92915050565b6000613934613945565b90506139408282613c76565b919050565b6000604051905090565b600067ffffffffffffffff82111561396a57613969613e0c565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561399657613995613e0c565b5b61399f82613e54565b9050602081019050919050565b600067ffffffffffffffff8211156139c7576139c6613e0c565b5b6139d082613e54565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a8482613bf8565b9150613a8f83613bf8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ac457613ac3613d21565b5b828201905092915050565b6000613ada82613bf8565b9150613ae583613bf8565b925082613af557613af4613d50565b5b828204905092915050565b6000613b0b82613bf8565b9150613b1683613bf8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b4f57613b4e613d21565b5b828202905092915050565b6000613b6582613bf8565b9150613b7083613bf8565b925082821015613b8357613b82613d21565b5b828203905092915050565b6000613b9982613bd8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613c2f578082015181840152602081019050613c14565b83811115613c3e576000848401525b50505050565b60006002820490506001821680613c5c57607f821691505b60208210811415613c7057613c6f613d7f565b5b50919050565b613c7f82613e54565b810181811067ffffffffffffffff82111715613c9e57613c9d613e0c565b5b80604052505050565b6000613cb282613bf8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ce557613ce4613d21565b5b600182019050919050565b6000613cfb82613bf8565b9150613d0683613bf8565b925082613d1657613d15613d50565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6142a381613b8e565b81146142ae57600080fd5b50565b6142ba81613ba0565b81146142c557600080fd5b50565b6142d181613bac565b81146142dc57600080fd5b50565b6142e881613bf8565b81146142f357600080fd5b5056fea2646970667358221220afb0178e888bb9f5c6e30fdf6bcd83fdde1e1d882f25c36b886553f1f084fae764736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000a44eef05d8c9a76a62e3c6be38f0b9dee2709930000000000000000000000000000000000000000000000000000000000000000f4472756e6b656e4d6f6e6b6579563200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005444d5356320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): DrunkenMonkeyV2
Arg [1] : _symbol (string): DMSV2
Arg [2] : _initBaseURI (string):
Arg [3] : _seller (address): 0xa44eeF05D8c9a76A62E3C6bE38f0b9DEE2709930
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 000000000000000000000000a44eef05d8c9a76a62e3c6be38f0b9dee2709930
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [5] : 4472756e6b656e4d6f6e6b657956320000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 444d535632000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
46256:4117:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40010:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49579:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26744:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28257:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46668:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27774:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46423:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40650:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46580:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49350:221;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28957:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46462:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40318:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46615:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50178:192;;;:::i;:::-;;29364:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47811:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48877:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40840:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49079:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46547:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26455:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46351:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26186:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5273:103;;;;;;;;;;;;;:::i;:::-;;49868:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4625:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48971:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26913:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47157:646;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28500:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49757:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29620:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46379:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48209:642;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46508:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49666:83;;;;;;;;;;;;;:::i;:::-;;49191:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28726:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47059:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50063:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5531:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40010:224;40112:4;40151:35;40136:50;;;:11;:50;;;;:90;;;;40190:36;40214:11;40190:23;:36::i;:::-;40136:90;40129:97;;40010:224;;;:::o;49579:79::-;4511:13;:11;:13::i;:::-;49644:6:::1;49635;;:15;;;;;;;;;;;;;;;;;;49579:79:::0;:::o;26744:100::-;26798:13;26831:5;26824:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26744:100;:::o;28257:171::-;28333:7;28353:23;28368:7;28353:14;:23::i;:::-;28396:15;:24;28412:7;28396:24;;;;;;;;;;;;;;;;;;;;;28389:31;;28257:171;;;:::o;46668:21::-;;;;;;;;;;;;;:::o;27774:417::-;27855:13;27871:23;27886:7;27871:14;:23::i;:::-;27855:39;;27919:5;27913:11;;:2;:11;;;;27905:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28013:5;27997:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28022:37;28039:5;28046:12;:10;:12::i;:::-;28022:16;:37::i;:::-;27997:62;27975:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;28162:21;28171:2;28175:7;28162:8;:21::i;:::-;27844:347;27774:417;;:::o;46423:32::-;;;;:::o;40650:113::-;40711:7;40738:10;:17;;;;40731:24;;40650:113;:::o;46580:28::-;;;;;;;;;;;;;:::o;49350:221::-;49391:4;49424;49411:17;;:9;;;;;;;;;;;:17;;;:55;;;;;49462:4;49432:34;;:14;:26;49447:10;49432:26;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;49411:55;49408:156;;;49489:11;;49482:18;;;;49408:156;49548:4;;49541:11;;49350:221;;:::o;28957:336::-;29152:41;29171:12;:10;:12::i;:::-;29185:7;29152:18;:41::i;:::-;29144:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29257:28;29267:4;29273:2;29277:7;29257:9;:28::i;:::-;28957:336;;;:::o;46462:39::-;;;;:::o;40318:256::-;40415:7;40451:23;40468:5;40451:16;:23::i;:::-;40443:5;:31;40435:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40540:12;:19;40553:5;40540:19;;;;;;;;;;;;;;;:26;40560:5;40540:26;;;;;;;;;;;;40533:33;;40318:256;;;;:::o;46615:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;50178:192::-;4511:13;:11;:13::i;:::-;50235:12:::1;50261:10;50253:24;;50299:21;50253:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50234:101;;;50354:7;50346:16;;;::::0;::::1;;50223:147;50178:192::o:0;29364:185::-;29502:39;29519:4;29525:2;29529:7;29502:39;;;;;;;;;;;;:16;:39::i;:::-;29364:185;;;:::o;47811:390::-;47898:16;47932:23;47958:17;47968:6;47958:9;:17::i;:::-;47932:43;;47986:25;48028:15;48014:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47986:58;;48060:9;48055:113;48075:15;48071:1;:19;48055:113;;;48126:30;48146:6;48154:1;48126:19;:30::i;:::-;48112:8;48121:1;48112:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;48092:3;;;;;:::i;:::-;;;;48055:113;;;;48185:8;48178:15;;;;47811:390;;;:::o;48877:86::-;4511:13;:11;:13::i;:::-;48947:8:::1;48940:4;:15;;;;48877:86:::0;:::o;40840:233::-;40915:7;40951:30;:28;:30::i;:::-;40943:5;:38;40935:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41048:10;41059:5;41048:17;;;;;;;;:::i;:::-;;;;;;;;;;41041:24;;40840:233;;;:::o;49079:104::-;4511:13;:11;:13::i;:::-;49164:11:::1;49154:7;:21;;;;;;;;;;;;:::i;:::-;;49079:104:::0;:::o;46547:26::-;;;;;;;;;;;;;:::o;26455:222::-;26527:7;26547:13;26563:7;:16;26571:7;26563:16;;;;;;;;;;;;;;;;;;;;;26547:32;;26615:1;26598:19;;:5;:19;;;;26590:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26664:5;26657:12;;;26455:222;;;:::o;46351:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26186:207::-;26258:7;26303:1;26286:19;;:5;:19;;;;26278:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26369:9;:16;26379:5;26369:16;;;;;;;;;;;;;;;;26362:23;;26186:207;;;:::o;5273:103::-;4511:13;:11;:13::i;:::-;5338:30:::1;5365:1;5338:18;:30::i;:::-;5273:103::o:0;49868:187::-;4511:13;:11;:13::i;:::-;49957:6:::1;49952:96;49972:5;:12;49969:1;:15;49952:96;;;50032:4;50005:14;:24;50020:5;50026:1;50020:8;;;;;;;;:::i;:::-;;;;;;;;50005:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;49986:3;;;;;:::i;:::-;;;;49952:96;;;;49868:187:::0;:::o;4625:87::-;4671:7;4698:6;;;;;;;;;;;4691:13;;4625:87;:::o;48971:100::-;4511:13;:11;:13::i;:::-;49055:8:::1;49041:11;:22;;;;48971:100:::0;:::o;26913:104::-;26969:13;27002:7;26995:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26913:104;:::o;47157:646::-;47218:14;47235:13;:11;:13::i;:::-;47218:30;;47270:6;;;;;;;;;;;47269:7;47261:16;;;;;;47310:1;47296:11;:15;47288:24;;;;;;47355:9;;47340:11;47331:6;:20;;;;:::i;:::-;:33;;47323:42;;;;;;47396:7;:5;:7::i;:::-;47382:21;;:10;:21;;;47378:303;;47436:4;47423:17;;:9;;;;;;;;;;;:17;;;47420:250;;;47468:14;:26;47483:10;47468:26;;;;;;;;;;;;;;;;;;;;;;;;;47460:35;;;;;;47549:11;47535;;:25;;;;:::i;:::-;47522:9;:38;;47514:47;;;;;;47420:250;;;47642:11;47635:4;;:18;;;;:::i;:::-;47622:9;:31;;47614:40;;;;;;47420:250;47378:303;47698:9;47710:1;47698:13;;47693:103;47718:11;47713:1;:16;47693:103;;47751:33;47761:10;47782:1;47773:6;:10;;;;:::i;:::-;47751:9;:33::i;:::-;47731:3;;;;;:::i;:::-;;;;47693:103;;;;47207:596;47157:646;:::o;28500:155::-;28595:52;28614:12;:10;:12::i;:::-;28628:8;28638;28595:18;:52::i;:::-;28500:155;;:::o;49757:103::-;4511:13;:11;:13::i;:::-;49848:4:::1;49824:14;:21;49839:5;49824:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;49757:103:::0;:::o;29620:323::-;29794:41;29813:12;:10;:12::i;:::-;29827:7;29794:18;:41::i;:::-;29786:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29897:38;29911:4;29917:2;29921:7;29930:4;29897:13;:38::i;:::-;29620:323;;;;:::o;46379:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48209:642::-;48327:13;48380:16;48388:7;48380;:16::i;:::-;48358:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;48484:28;48515:10;:8;:10::i;:::-;48484:41;;48587:1;48562:14;48556:28;:32;:287;;;;;;;;;;;;;;;;;48680:14;48721:18;:7;:16;:18::i;:::-;48766:13;48637:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48556:287;48536:307;;;48209:642;;;:::o;46508:32::-;;;;:::o;49666:83::-;4511:13;:11;:13::i;:::-;49732:9:::1;;;;;;;;;;;49731:10;49719:9;;:22;;;;;;;;;;;;;;;;;;49666:83::o:0;49191:151::-;4511:13;:11;:13::i;:::-;49317:17:::1;49301:13;:33;;;;;;;;;;;;:::i;:::-;;49191:151:::0;:::o;28726:164::-;28823:4;28847:18;:25;28866:5;28847:25;;;;;;;;;;;;;;;:35;28873:8;28847:35;;;;;;;;;;;;;;;;;;;;;;;;;28840:42;;28726:164;;;;:::o;47059:90::-;4511:13;:11;:13::i;:::-;47134:7:::1;47125:6;;:16;;;;;;;;;;;;;;;;;;47059:90:::0;:::o;50063:107::-;4511:13;:11;:13::i;:::-;50157:5:::1;50133:14;:21;50148:5;50133:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;50063:107:::0;:::o;5531:201::-;4511:13;:11;:13::i;:::-;5640:1:::1;5620:22;;:8;:22;;;;5612:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5696:28;5715:8;5696:18;:28::i;:::-;5531:201:::0;:::o;25817:305::-;25919:4;25971:25;25956:40;;;:11;:40;;;;:105;;;;26028:33;26013:48;;;:11;:48;;;;25956:105;:158;;;;26078:36;26102:11;26078:23;:36::i;:::-;25956:158;25936:178;;25817:305;;;:::o;4790:132::-;4865:12;:10;:12::i;:::-;4854:23;;:7;:5;:7::i;:::-;:23;;;4846:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4790:132::o;36232:135::-;36314:16;36322:7;36314;:16::i;:::-;36306:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;36232:135;:::o;3176:98::-;3229:7;3256:10;3249:17;;3176:98;:::o;35511:174::-;35613:2;35586:15;:24;35602:7;35586:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35669:7;35665:2;35631:46;;35640:23;35655:7;35640:14;:23::i;:::-;35631:46;;;;;;;;;;;;35511:174;;:::o;31744:264::-;31837:4;31854:13;31870:23;31885:7;31870:14;:23::i;:::-;31854:39;;31923:5;31912:16;;:7;:16;;;:52;;;;31932:32;31949:5;31956:7;31932:16;:32::i;:::-;31912:52;:87;;;;31992:7;31968:31;;:20;31980:7;31968:11;:20::i;:::-;:31;;;31912:87;31904:96;;;31744:264;;;;:::o;34767:625::-;34926:4;34899:31;;:23;34914:7;34899:14;:23::i;:::-;:31;;;34891:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35005:1;34991:16;;:2;:16;;;;34983:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35061:39;35082:4;35088:2;35092:7;35061:20;:39::i;:::-;35165:29;35182:1;35186:7;35165:8;:29::i;:::-;35226:1;35207:9;:15;35217:4;35207:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35255:1;35238:9;:13;35248:2;35238:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35286:2;35267:7;:16;35275:7;35267:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35325:7;35321:2;35306:27;;35315:4;35306:27;;;;;;;;;;;;35346:38;35366:4;35372:2;35376:7;35346:19;:38::i;:::-;34767:625;;;:::o;5892:191::-;5966:16;5985:6;;;;;;;;;;;5966:25;;6011:8;6002:6;;:17;;;;;;;;;;;;;;;;;;6066:8;6035:40;;6056:8;6035:40;;;;;;;;;;;;5955:128;5892:191;:::o;32350:110::-;32426:26;32436:2;32440:7;32426:26;;;;;;;;;;;;:9;:26::i;:::-;32350:110;;:::o;35828:315::-;35983:8;35974:17;;:5;:17;;;;35966:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36070:8;36032:18;:25;36051:5;36032:25;;;;;;;;;;;;;;;:35;36058:8;36032:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36116:8;36094:41;;36109:5;36094:41;;;36126:8;36094:41;;;;;;:::i;:::-;;;;;;;;35828:315;;;:::o;30824:313::-;30980:28;30990:4;30996:2;31000:7;30980:9;:28::i;:::-;31027:47;31050:4;31056:2;31060:7;31069:4;31027:22;:47::i;:::-;31019:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30824:313;;;;:::o;31450:127::-;31515:4;31567:1;31539:30;;:7;:16;31547:7;31539:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31532:37;;31450:127;;;:::o;46943:108::-;47003:13;47036:7;47029:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46943:108;:::o;430:723::-;486:13;716:1;707:5;:10;703:53;;;734:10;;;;;;;;;;;;;;;;;;;;;703:53;766:12;781:5;766:20;;797:14;822:78;837:1;829:4;:9;822:78;;855:8;;;;;:::i;:::-;;;;886:2;878:10;;;;;:::i;:::-;;;822:78;;;910:19;942:6;932:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:39;;960:154;976:1;967:5;:10;960:154;;1004:1;994:11;;;;;:::i;:::-;;;1071:2;1063:5;:10;;;;:::i;:::-;1050:2;:24;;;;:::i;:::-;1037:39;;1020:6;1027;1020:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1100:2;1091:11;;;;;:::i;:::-;;;960:154;;;1138:6;1124:21;;;;;430:723;;;;:::o;17479:157::-;17564:4;17603:25;17588:40;;;:11;:40;;;;17581:47;;17479:157;;;:::o;41686:589::-;41830:45;41857:4;41863:2;41867:7;41830:26;:45::i;:::-;41908:1;41892:18;;:4;:18;;;41888:187;;;41927:40;41959:7;41927:31;:40::i;:::-;41888:187;;;41997:2;41989:10;;:4;:10;;;41985:90;;42016:47;42049:4;42055:7;42016:32;:47::i;:::-;41985:90;41888:187;42103:1;42089:16;;:2;:16;;;42085:183;;;42122:45;42159:7;42122:36;:45::i;:::-;42085:183;;;42195:4;42189:10;;:2;:10;;;42185:83;;42216:40;42244:2;42248:7;42216:27;:40::i;:::-;42185:83;42085:183;41686:589;;;:::o;38867:125::-;;;;:::o;32687:319::-;32816:18;32822:2;32826:7;32816:5;:18::i;:::-;32867:53;32898:1;32902:2;32906:7;32915:4;32867:22;:53::i;:::-;32845:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;32687:319;;;:::o;36931:853::-;37085:4;37106:15;:2;:13;;;:15::i;:::-;37102:675;;;37158:2;37142:36;;;37179:12;:10;:12::i;:::-;37193:4;37199:7;37208:4;37142:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37138:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37400:1;37383:6;:13;:18;37379:328;;;37426:60;;;;;;;;;;:::i;:::-;;;;;;;;37379:328;37657:6;37651:13;37642:6;37638:2;37634:15;37627:38;37138:584;37274:41;;;37264:51;;;:6;:51;;;;37257:58;;;;;37102:675;37761:4;37754:11;;36931:853;;;;;;;:::o;38356:126::-;;;;:::o;42998:164::-;43102:10;:17;;;;43075:15;:24;43091:7;43075:24;;;;;;;;;;;:44;;;;43130:10;43146:7;43130:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42998:164;:::o;43789:988::-;44055:22;44105:1;44080:22;44097:4;44080:16;:22::i;:::-;:26;;;;:::i;:::-;44055:51;;44117:18;44138:17;:26;44156:7;44138:26;;;;;;;;;;;;44117:47;;44285:14;44271:10;:28;44267:328;;44316:19;44338:12;:18;44351:4;44338:18;;;;;;;;;;;;;;;:34;44357:14;44338:34;;;;;;;;;;;;44316:56;;44422:11;44389:12;:18;44402:4;44389:18;;;;;;;;;;;;;;;:30;44408:10;44389:30;;;;;;;;;;;:44;;;;44539:10;44506:17;:30;44524:11;44506:30;;;;;;;;;;;:43;;;;44301:294;44267:328;44691:17;:26;44709:7;44691:26;;;;;;;;;;;44684:33;;;44735:12;:18;44748:4;44735:18;;;;;;;;;;;;;;;:34;44754:14;44735:34;;;;;;;;;;;44728:41;;;43870:907;;43789:988;;:::o;45072:1079::-;45325:22;45370:1;45350:10;:17;;;;:21;;;;:::i;:::-;45325:46;;45382:18;45403:15;:24;45419:7;45403:24;;;;;;;;;;;;45382:45;;45754:19;45776:10;45787:14;45776:26;;;;;;;;:::i;:::-;;;;;;;;;;45754:48;;45840:11;45815:10;45826;45815:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45951:10;45920:15;:28;45936:11;45920:28;;;;;;;;;;;:41;;;;46092:15;:24;46108:7;46092:24;;;;;;;;;;;46085:31;;;46127:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45143:1008;;;45072:1079;:::o;42576:221::-;42661:14;42678:20;42695:2;42678:16;:20::i;:::-;42661:37;;42736:7;42709:12;:16;42722:2;42709:16;;;;;;;;;;;;;;;:24;42726:6;42709:24;;;;;;;;;;;:34;;;;42783:6;42754:17;:26;42772:7;42754:26;;;;;;;;;;;:35;;;;42650:147;42576:221;;:::o;33342:439::-;33436:1;33422:16;;:2;:16;;;;33414:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33495:16;33503:7;33495;:16::i;:::-;33494:17;33486:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33557:45;33586:1;33590:2;33594:7;33557:20;:45::i;:::-;33632:1;33615:9;:13;33625:2;33615:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33663:2;33644:7;:16;33652:7;33644:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33708:7;33704:2;33683:33;;33700:1;33683:33;;;;;;;;;;;;33729:44;33757:1;33761:2;33765:7;33729:19;:44::i;:::-;33342:439;;:::o;7323:326::-;7383:4;7640:1;7618:7;:19;;;:23;7611:30;;7323:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:179::-;9239:10;9260:46;9302:3;9294:6;9260:46;:::i;:::-;9338:4;9333:3;9329:14;9315:28;;9170:179;;;;:::o;9355:118::-;9442:24;9460:5;9442:24;:::i;:::-;9437:3;9430:37;9355:118;;:::o;9509:732::-;9628:3;9657:54;9705:5;9657:54;:::i;:::-;9727:86;9806:6;9801:3;9727:86;:::i;:::-;9720:93;;9837:56;9887:5;9837:56;:::i;:::-;9916:7;9947:1;9932:284;9957:6;9954:1;9951:13;9932:284;;;10033:6;10027:13;10060:63;10119:3;10104:13;10060:63;:::i;:::-;10053:70;;10146:60;10199:6;10146:60;:::i;:::-;10136:70;;9992:224;9979:1;9976;9972:9;9967:14;;9932:284;;;9936:14;10232:3;10225:10;;9633:608;;;9509:732;;;;:::o;10247:109::-;10328:21;10343:5;10328:21;:::i;:::-;10323:3;10316:34;10247:109;;:::o;10362:360::-;10448:3;10476:38;10508:5;10476:38;:::i;:::-;10530:70;10593:6;10588:3;10530:70;:::i;:::-;10523:77;;10609:52;10654:6;10649:3;10642:4;10635:5;10631:16;10609:52;:::i;:::-;10686:29;10708:6;10686:29;:::i;:::-;10681:3;10677:39;10670:46;;10452:270;10362:360;;;;:::o;10728:364::-;10816:3;10844:39;10877:5;10844:39;:::i;:::-;10899:71;10963:6;10958:3;10899:71;:::i;:::-;10892:78;;10979:52;11024:6;11019:3;11012:4;11005:5;11001:16;10979:52;:::i;:::-;11056:29;11078:6;11056:29;:::i;:::-;11051:3;11047:39;11040:46;;10820:272;10728:364;;;;:::o;11098:377::-;11204:3;11232:39;11265:5;11232:39;:::i;:::-;11287:89;11369:6;11364:3;11287:89;:::i;:::-;11280:96;;11385:52;11430:6;11425:3;11418:4;11411:5;11407:16;11385:52;:::i;:::-;11462:6;11457:3;11453:16;11446:23;;11208:267;11098:377;;;;:::o;11505:845::-;11608:3;11645:5;11639:12;11674:36;11700:9;11674:36;:::i;:::-;11726:89;11808:6;11803:3;11726:89;:::i;:::-;11719:96;;11846:1;11835:9;11831:17;11862:1;11857:137;;;;12008:1;12003:341;;;;11824:520;;11857:137;11941:4;11937:9;11926;11922:25;11917:3;11910:38;11977:6;11972:3;11968:16;11961:23;;11857:137;;12003:341;12070:38;12102:5;12070:38;:::i;:::-;12130:1;12144:154;12158:6;12155:1;12152:13;12144:154;;;12232:7;12226:14;12222:1;12217:3;12213:11;12206:35;12282:1;12273:7;12269:15;12258:26;;12180:4;12177:1;12173:12;12168:17;;12144:154;;;12327:6;12322:3;12318:16;12311:23;;12010:334;;11824:520;;11612:738;;11505:845;;;;:::o;12356:366::-;12498:3;12519:67;12583:2;12578:3;12519:67;:::i;:::-;12512:74;;12595:93;12684:3;12595:93;:::i;:::-;12713:2;12708:3;12704:12;12697:19;;12356:366;;;:::o;12728:::-;12870:3;12891:67;12955:2;12950:3;12891:67;:::i;:::-;12884:74;;12967:93;13056:3;12967:93;:::i;:::-;13085:2;13080:3;13076:12;13069:19;;12728:366;;;:::o;13100:::-;13242:3;13263:67;13327:2;13322:3;13263:67;:::i;:::-;13256:74;;13339:93;13428:3;13339:93;:::i;:::-;13457:2;13452:3;13448:12;13441:19;;13100:366;;;:::o;13472:::-;13614:3;13635:67;13699:2;13694:3;13635:67;:::i;:::-;13628:74;;13711:93;13800:3;13711:93;:::i;:::-;13829:2;13824:3;13820:12;13813:19;;13472:366;;;:::o;13844:::-;13986:3;14007:67;14071:2;14066:3;14007:67;:::i;:::-;14000:74;;14083:93;14172:3;14083:93;:::i;:::-;14201:2;14196:3;14192:12;14185:19;;13844:366;;;:::o;14216:::-;14358:3;14379:67;14443:2;14438:3;14379:67;:::i;:::-;14372:74;;14455:93;14544:3;14455:93;:::i;:::-;14573:2;14568:3;14564:12;14557:19;;14216:366;;;:::o;14588:::-;14730:3;14751:67;14815:2;14810:3;14751:67;:::i;:::-;14744:74;;14827:93;14916:3;14827:93;:::i;:::-;14945:2;14940:3;14936:12;14929:19;;14588:366;;;:::o;14960:::-;15102:3;15123:67;15187:2;15182:3;15123:67;:::i;:::-;15116:74;;15199:93;15288:3;15199:93;:::i;:::-;15317:2;15312:3;15308:12;15301:19;;14960:366;;;:::o;15332:::-;15474:3;15495:67;15559:2;15554:3;15495:67;:::i;:::-;15488:74;;15571:93;15660:3;15571:93;:::i;:::-;15689:2;15684:3;15680:12;15673:19;;15332:366;;;:::o;15704:::-;15846:3;15867:67;15931:2;15926:3;15867:67;:::i;:::-;15860:74;;15943:93;16032:3;15943:93;:::i;:::-;16061:2;16056:3;16052:12;16045:19;;15704:366;;;:::o;16076:::-;16218:3;16239:67;16303:2;16298:3;16239:67;:::i;:::-;16232:74;;16315:93;16404:3;16315:93;:::i;:::-;16433:2;16428:3;16424:12;16417:19;;16076:366;;;:::o;16448:::-;16590:3;16611:67;16675:2;16670:3;16611:67;:::i;:::-;16604:74;;16687:93;16776:3;16687:93;:::i;:::-;16805:2;16800:3;16796:12;16789:19;;16448:366;;;:::o;16820:::-;16962:3;16983:67;17047:2;17042:3;16983:67;:::i;:::-;16976:74;;17059:93;17148:3;17059:93;:::i;:::-;17177:2;17172:3;17168:12;17161:19;;16820:366;;;:::o;17192:::-;17334:3;17355:67;17419:2;17414:3;17355:67;:::i;:::-;17348:74;;17431:93;17520:3;17431:93;:::i;:::-;17549:2;17544:3;17540:12;17533:19;;17192:366;;;:::o;17564:398::-;17723:3;17744:83;17825:1;17820:3;17744:83;:::i;:::-;17737:90;;17836:93;17925:3;17836:93;:::i;:::-;17954:1;17949:3;17945:11;17938:18;;17564:398;;;:::o;17968:366::-;18110:3;18131:67;18195:2;18190:3;18131:67;:::i;:::-;18124:74;;18207:93;18296:3;18207:93;:::i;:::-;18325:2;18320:3;18316:12;18309:19;;17968:366;;;:::o;18340:::-;18482:3;18503:67;18567:2;18562:3;18503:67;:::i;:::-;18496:74;;18579:93;18668:3;18579:93;:::i;:::-;18697:2;18692:3;18688:12;18681:19;;18340:366;;;:::o;18712:108::-;18789:24;18807:5;18789:24;:::i;:::-;18784:3;18777:37;18712:108;;:::o;18826:118::-;18913:24;18931:5;18913:24;:::i;:::-;18908:3;18901:37;18826:118;;:::o;18950:589::-;19175:3;19197:95;19288:3;19279:6;19197:95;:::i;:::-;19190:102;;19309:95;19400:3;19391:6;19309:95;:::i;:::-;19302:102;;19421:92;19509:3;19500:6;19421:92;:::i;:::-;19414:99;;19530:3;19523:10;;18950:589;;;;;;:::o;19545:379::-;19729:3;19751:147;19894:3;19751:147;:::i;:::-;19744:154;;19915:3;19908:10;;19545:379;;;:::o;19930:222::-;20023:4;20061:2;20050:9;20046:18;20038:26;;20074:71;20142:1;20131:9;20127:17;20118:6;20074:71;:::i;:::-;19930:222;;;;:::o;20158:640::-;20353:4;20391:3;20380:9;20376:19;20368:27;;20405:71;20473:1;20462:9;20458:17;20449:6;20405:71;:::i;:::-;20486:72;20554:2;20543:9;20539:18;20530:6;20486:72;:::i;:::-;20568;20636:2;20625:9;20621:18;20612:6;20568:72;:::i;:::-;20687:9;20681:4;20677:20;20672:2;20661:9;20657:18;20650:48;20715:76;20786:4;20777:6;20715:76;:::i;:::-;20707:84;;20158:640;;;;;;;:::o;20804:373::-;20947:4;20985:2;20974:9;20970:18;20962:26;;21034:9;21028:4;21024:20;21020:1;21009:9;21005:17;20998:47;21062:108;21165:4;21156:6;21062:108;:::i;:::-;21054:116;;20804:373;;;;:::o;21183:210::-;21270:4;21308:2;21297:9;21293:18;21285:26;;21321:65;21383:1;21372:9;21368:17;21359:6;21321:65;:::i;:::-;21183:210;;;;:::o;21399:313::-;21512:4;21550:2;21539:9;21535:18;21527:26;;21599:9;21593:4;21589:20;21585:1;21574:9;21570:17;21563:47;21627:78;21700:4;21691:6;21627:78;:::i;:::-;21619:86;;21399:313;;;;:::o;21718:419::-;21884:4;21922:2;21911:9;21907:18;21899:26;;21971:9;21965:4;21961:20;21957:1;21946:9;21942:17;21935:47;21999:131;22125:4;21999:131;:::i;:::-;21991:139;;21718:419;;;:::o;22143:::-;22309:4;22347:2;22336:9;22332:18;22324:26;;22396:9;22390:4;22386:20;22382:1;22371:9;22367:17;22360:47;22424:131;22550:4;22424:131;:::i;:::-;22416:139;;22143:419;;;:::o;22568:::-;22734:4;22772:2;22761:9;22757:18;22749:26;;22821:9;22815:4;22811:20;22807:1;22796:9;22792:17;22785:47;22849:131;22975:4;22849:131;:::i;:::-;22841:139;;22568:419;;;:::o;22993:::-;23159:4;23197:2;23186:9;23182:18;23174:26;;23246:9;23240:4;23236:20;23232:1;23221:9;23217:17;23210:47;23274:131;23400:4;23274:131;:::i;:::-;23266:139;;22993:419;;;:::o;23418:::-;23584:4;23622:2;23611:9;23607:18;23599:26;;23671:9;23665:4;23661:20;23657:1;23646:9;23642:17;23635:47;23699:131;23825:4;23699:131;:::i;:::-;23691:139;;23418:419;;;:::o;23843:::-;24009:4;24047:2;24036:9;24032:18;24024:26;;24096:9;24090:4;24086:20;24082:1;24071:9;24067:17;24060:47;24124:131;24250:4;24124:131;:::i;:::-;24116:139;;23843:419;;;:::o;24268:::-;24434:4;24472:2;24461:9;24457:18;24449:26;;24521:9;24515:4;24511:20;24507:1;24496:9;24492:17;24485:47;24549:131;24675:4;24549:131;:::i;:::-;24541:139;;24268:419;;;:::o;24693:::-;24859:4;24897:2;24886:9;24882:18;24874:26;;24946:9;24940:4;24936:20;24932:1;24921:9;24917:17;24910:47;24974:131;25100:4;24974:131;:::i;:::-;24966:139;;24693:419;;;:::o;25118:::-;25284:4;25322:2;25311:9;25307:18;25299:26;;25371:9;25365:4;25361:20;25357:1;25346:9;25342:17;25335:47;25399:131;25525:4;25399:131;:::i;:::-;25391:139;;25118:419;;;:::o;25543:::-;25709:4;25747:2;25736:9;25732:18;25724:26;;25796:9;25790:4;25786:20;25782:1;25771:9;25767:17;25760:47;25824:131;25950:4;25824:131;:::i;:::-;25816:139;;25543:419;;;:::o;25968:::-;26134:4;26172:2;26161:9;26157:18;26149:26;;26221:9;26215:4;26211:20;26207:1;26196:9;26192:17;26185:47;26249:131;26375:4;26249:131;:::i;:::-;26241:139;;25968:419;;;:::o;26393:::-;26559:4;26597:2;26586:9;26582:18;26574:26;;26646:9;26640:4;26636:20;26632:1;26621:9;26617:17;26610:47;26674:131;26800:4;26674:131;:::i;:::-;26666:139;;26393:419;;;:::o;26818:::-;26984:4;27022:2;27011:9;27007:18;26999:26;;27071:9;27065:4;27061:20;27057:1;27046:9;27042:17;27035:47;27099:131;27225:4;27099:131;:::i;:::-;27091:139;;26818:419;;;:::o;27243:::-;27409:4;27447:2;27436:9;27432:18;27424:26;;27496:9;27490:4;27486:20;27482:1;27471:9;27467:17;27460:47;27524:131;27650:4;27524:131;:::i;:::-;27516:139;;27243:419;;;:::o;27668:::-;27834:4;27872:2;27861:9;27857:18;27849:26;;27921:9;27915:4;27911:20;27907:1;27896:9;27892:17;27885:47;27949:131;28075:4;27949:131;:::i;:::-;27941:139;;27668:419;;;:::o;28093:::-;28259:4;28297:2;28286:9;28282:18;28274:26;;28346:9;28340:4;28336:20;28332:1;28321:9;28317:17;28310:47;28374:131;28500:4;28374:131;:::i;:::-;28366:139;;28093:419;;;:::o;28518:222::-;28611:4;28649:2;28638:9;28634:18;28626:26;;28662:71;28730:1;28719:9;28715:17;28706:6;28662:71;:::i;:::-;28518:222;;;;:::o;28746:129::-;28780:6;28807:20;;:::i;:::-;28797:30;;28836:33;28864:4;28856:6;28836:33;:::i;:::-;28746:129;;;:::o;28881:75::-;28914:6;28947:2;28941:9;28931:19;;28881:75;:::o;28962:311::-;29039:4;29129:18;29121:6;29118:30;29115:56;;;29151:18;;:::i;:::-;29115:56;29201:4;29193:6;29189:17;29181:25;;29261:4;29255;29251:15;29243:23;;28962:311;;;:::o;29279:307::-;29340:4;29430:18;29422:6;29419:30;29416:56;;;29452:18;;:::i;:::-;29416:56;29490:29;29512:6;29490:29;:::i;:::-;29482:37;;29574:4;29568;29564:15;29556:23;;29279:307;;;:::o;29592:308::-;29654:4;29744:18;29736:6;29733:30;29730:56;;;29766:18;;:::i;:::-;29730:56;29804:29;29826:6;29804:29;:::i;:::-;29796:37;;29888:4;29882;29878:15;29870:23;;29592:308;;;:::o;29906:132::-;29973:4;29996:3;29988:11;;30026:4;30021:3;30017:14;30009:22;;29906:132;;;:::o;30044:141::-;30093:4;30116:3;30108:11;;30139:3;30136:1;30129:14;30173:4;30170:1;30160:18;30152:26;;30044:141;;;:::o;30191:114::-;30258:6;30292:5;30286:12;30276:22;;30191:114;;;:::o;30311:98::-;30362:6;30396:5;30390:12;30380:22;;30311:98;;;:::o;30415:99::-;30467:6;30501:5;30495:12;30485:22;;30415:99;;;:::o;30520:113::-;30590:4;30622;30617:3;30613:14;30605:22;;30520:113;;;:::o;30639:184::-;30738:11;30772:6;30767:3;30760:19;30812:4;30807:3;30803:14;30788:29;;30639:184;;;;:::o;30829:168::-;30912:11;30946:6;30941:3;30934:19;30986:4;30981:3;30977:14;30962:29;;30829:168;;;;:::o;31003:147::-;31104:11;31141:3;31126:18;;31003:147;;;;:::o;31156:169::-;31240:11;31274:6;31269:3;31262:19;31314:4;31309:3;31305:14;31290:29;;31156:169;;;;:::o;31331:148::-;31433:11;31470:3;31455:18;;31331:148;;;;:::o;31485:305::-;31525:3;31544:20;31562:1;31544:20;:::i;:::-;31539:25;;31578:20;31596:1;31578:20;:::i;:::-;31573:25;;31732:1;31664:66;31660:74;31657:1;31654:81;31651:107;;;31738:18;;:::i;:::-;31651:107;31782:1;31779;31775:9;31768:16;;31485:305;;;;:::o;31796:185::-;31836:1;31853:20;31871:1;31853:20;:::i;:::-;31848:25;;31887:20;31905:1;31887:20;:::i;:::-;31882:25;;31926:1;31916:35;;31931:18;;:::i;:::-;31916:35;31973:1;31970;31966:9;31961:14;;31796:185;;;;:::o;31987:348::-;32027:7;32050:20;32068:1;32050:20;:::i;:::-;32045:25;;32084:20;32102:1;32084:20;:::i;:::-;32079:25;;32272:1;32204:66;32200:74;32197:1;32194:81;32189:1;32182:9;32175:17;32171:105;32168:131;;;32279:18;;:::i;:::-;32168:131;32327:1;32324;32320:9;32309:20;;31987:348;;;;:::o;32341:191::-;32381:4;32401:20;32419:1;32401:20;:::i;:::-;32396:25;;32435:20;32453:1;32435:20;:::i;:::-;32430:25;;32474:1;32471;32468:8;32465:34;;;32479:18;;:::i;:::-;32465:34;32524:1;32521;32517:9;32509:17;;32341:191;;;;:::o;32538:96::-;32575:7;32604:24;32622:5;32604:24;:::i;:::-;32593:35;;32538:96;;;:::o;32640:90::-;32674:7;32717:5;32710:13;32703:21;32692:32;;32640:90;;;:::o;32736:149::-;32772:7;32812:66;32805:5;32801:78;32790:89;;32736:149;;;:::o;32891:126::-;32928:7;32968:42;32961:5;32957:54;32946:65;;32891:126;;;:::o;33023:77::-;33060:7;33089:5;33078:16;;33023:77;;;:::o;33106:154::-;33190:6;33185:3;33180;33167:30;33252:1;33243:6;33238:3;33234:16;33227:27;33106:154;;;:::o;33266:307::-;33334:1;33344:113;33358:6;33355:1;33352:13;33344:113;;;33443:1;33438:3;33434:11;33428:18;33424:1;33419:3;33415:11;33408:39;33380:2;33377:1;33373:10;33368:15;;33344:113;;;33475:6;33472:1;33469:13;33466:101;;;33555:1;33546:6;33541:3;33537:16;33530:27;33466:101;33315:258;33266:307;;;:::o;33579:320::-;33623:6;33660:1;33654:4;33650:12;33640:22;;33707:1;33701:4;33697:12;33728:18;33718:81;;33784:4;33776:6;33772:17;33762:27;;33718:81;33846:2;33838:6;33835:14;33815:18;33812:38;33809:84;;;33865:18;;:::i;:::-;33809:84;33630:269;33579:320;;;:::o;33905:281::-;33988:27;34010:4;33988:27;:::i;:::-;33980:6;33976:40;34118:6;34106:10;34103:22;34082:18;34070:10;34067:34;34064:62;34061:88;;;34129:18;;:::i;:::-;34061:88;34169:10;34165:2;34158:22;33948:238;33905:281;;:::o;34192:233::-;34231:3;34254:24;34272:5;34254:24;:::i;:::-;34245:33;;34300:66;34293:5;34290:77;34287:103;;;34370:18;;:::i;:::-;34287:103;34417:1;34410:5;34406:13;34399:20;;34192:233;;;:::o;34431:176::-;34463:1;34480:20;34498:1;34480:20;:::i;:::-;34475:25;;34514:20;34532:1;34514:20;:::i;:::-;34509:25;;34553:1;34543:35;;34558:18;;:::i;:::-;34543:35;34599:1;34596;34592:9;34587:14;;34431:176;;;;:::o;34613:180::-;34661:77;34658:1;34651:88;34758:4;34755:1;34748:15;34782:4;34779:1;34772:15;34799:180;34847:77;34844:1;34837:88;34944:4;34941:1;34934:15;34968:4;34965:1;34958:15;34985:180;35033:77;35030:1;35023:88;35130:4;35127:1;35120:15;35154:4;35151:1;35144:15;35171:180;35219:77;35216:1;35209:88;35316:4;35313:1;35306:15;35340:4;35337:1;35330:15;35357:180;35405:77;35402:1;35395:88;35502:4;35499:1;35492:15;35526:4;35523:1;35516:15;35543:180;35591:77;35588:1;35581:88;35688:4;35685:1;35678:15;35712:4;35709:1;35702:15;35729:117;35838:1;35835;35828:12;35852:117;35961:1;35958;35951:12;35975:117;36084:1;36081;36074:12;36098:117;36207:1;36204;36197:12;36221:117;36330:1;36327;36320:12;36344:102;36385:6;36436:2;36432:7;36427:2;36420:5;36416:14;36412:28;36402:38;;36344:102;;;:::o;36452:230::-;36592:34;36588:1;36580:6;36576:14;36569:58;36661:13;36656:2;36648:6;36644:15;36637:38;36452:230;:::o;36688:237::-;36828:34;36824:1;36816:6;36812:14;36805:58;36897:20;36892:2;36884:6;36880:15;36873:45;36688:237;:::o;36931:225::-;37071:34;37067:1;37059:6;37055:14;37048:58;37140:8;37135:2;37127:6;37123:15;37116:33;36931:225;:::o;37162:224::-;37302:34;37298:1;37290:6;37286:14;37279:58;37371:7;37366:2;37358:6;37354:15;37347:32;37162:224;:::o;37392:178::-;37532:30;37528:1;37520:6;37516:14;37509:54;37392:178;:::o;37576:223::-;37716:34;37712:1;37704:6;37700:14;37693:58;37785:6;37780:2;37772:6;37768:15;37761:31;37576:223;:::o;37805:175::-;37945:27;37941:1;37933:6;37929:14;37922:51;37805:175;:::o;37986:228::-;38126:34;38122:1;38114:6;38110:14;38103:58;38195:11;38190:2;38182:6;38178:15;38171:36;37986:228;:::o;38220:249::-;38360:34;38356:1;38348:6;38344:14;38337:58;38429:32;38424:2;38416:6;38412:15;38405:57;38220:249;:::o;38475:182::-;38615:34;38611:1;38603:6;38599:14;38592:58;38475:182;:::o;38663:::-;38803:34;38799:1;38791:6;38787:14;38780:58;38663:182;:::o;38851:234::-;38991:34;38987:1;38979:6;38975:14;38968:58;39060:17;39055:2;39047:6;39043:15;39036:42;38851:234;:::o;39091:174::-;39231:26;39227:1;39219:6;39215:14;39208:50;39091:174;:::o;39271:220::-;39411:34;39407:1;39399:6;39395:14;39388:58;39480:3;39475:2;39467:6;39463:15;39456:28;39271:220;:::o;39497:114::-;;:::o;39617:231::-;39757:34;39753:1;39745:6;39741:14;39734:58;39826:14;39821:2;39813:6;39809:15;39802:39;39617:231;:::o;39854:233::-;39994:34;39990:1;39982:6;39978:14;39971:58;40063:16;40058:2;40050:6;40046:15;40039:41;39854:233;:::o;40093:122::-;40166:24;40184:5;40166:24;:::i;:::-;40159:5;40156:35;40146:63;;40205:1;40202;40195:12;40146:63;40093:122;:::o;40221:116::-;40291:21;40306:5;40291:21;:::i;:::-;40284:5;40281:32;40271:60;;40327:1;40324;40317:12;40271:60;40221:116;:::o;40343:120::-;40415:23;40432:5;40415:23;:::i;:::-;40408:5;40405:34;40395:62;;40453:1;40450;40443:12;40395:62;40343:120;:::o;40469:122::-;40542:24;40560:5;40542:24;:::i;:::-;40535:5;40532:35;40522:63;;40581:1;40578;40571:12;40522:63;40469:122;:::o
Swarm Source
ipfs://afb0178e888bb9f5c6e30fdf6bcd83fdde1e1d882f25c36b886553f1f084fae7
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.