Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 7 from a total of 7 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Free Mint Item | 13759861 | 997 days ago | IN | 0 ETH | 0.01251475 | ||||
Add Addresses To... | 13758916 | 997 days ago | IN | 0 ETH | 0.00285578 | ||||
Add Addresses To... | 13758857 | 997 days ago | IN | 0 ETH | 0.00208891 | ||||
Add Addresses To... | 13758823 | 997 days ago | IN | 0 ETH | 0.00234697 | ||||
Add Addresses To... | 13758709 | 997 days ago | IN | 0 ETH | 0.00213021 | ||||
Add Addresses To... | 13758626 | 997 days ago | IN | 0 ETH | 0.51507142 | ||||
0x60806040 | 13758567 | 997 days ago | IN | 0 ETH | 0.22426866 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Spookles
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-07 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.0 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.0 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (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/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.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 `IERC721.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.0 (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.0 (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 v4.4.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`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.0 (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 v4.4.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: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _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: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {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 Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: SpookleDoodleMiraiETH.sol pragma solidity ^0.8.9; contract Spookles is ERC721URIStorage { using Counters for Counters.Counter; Counters.Counter private _tokenIds; bool enforceWhitelist = true; address contractDeployer; address payable revenueWallet = payable(0xcFa20130F90B28AA3c4dEc630F0C82F9c2d84661); mapping(address => bool) whitelistedAddress; mapping(address => bool) freeMintAddress; event NewItemMinted(address owner, uint256 tokenId, string tokenURI); constructor() ERC721("Spookles", "Spookles") { contractDeployer = msg.sender; } function addAddressesToWhitelist(address[] calldata whitelistArray, address[] calldata freeMintArray) public returns (bool) { require(msg.sender == contractDeployer); for(uint i=0; i < whitelistArray.length; i++) { whitelistedAddress[whitelistArray[i]] = true; } for(uint i=0; i < freeMintArray.length; i++) { freeMintAddress[freeMintArray[i]] = true; } return true; } function remainingToMint() public view returns (uint256) { return (300 - _tokenIds.current()); } function uint2str(uint _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint j = _i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len; while (_i != 0) { k = k-1; uint8 temp = (48 + uint8(_i - _i / 10 * 10)); bytes1 b1 = bytes1(temp); bstr[k] = b1; _i /= 10; } return string(bstr); } function mintItem() public payable returns (uint256) { require(_tokenIds.current() <= 300, "All tokens have been minted"); if(enforceWhitelist) require(whitelistedAddress[msg.sender] == true, "You are not whitelisted to mint on this contract"); require(msg.value >= 0.09 * 10**18, "You haven't sent enough ETH to mint."); _tokenIds.increment(); uint256 newItemId = _tokenIds.current(); _mint(msg.sender, newItemId); _setTokenURI(newItemId, string(abi.encodePacked("https://spookles.app/metadata/", "", uint2str(newItemId)))); emit NewItemMinted(msg.sender, newItemId, string(abi.encodePacked("https://spookles.app/metadata/", "", newItemId))); revenueWallet.transfer(msg.value); return newItemId; } function freeMintItem() public payable returns (uint256) { require(_tokenIds.current() <= 300, "All tokens have been minted"); if(enforceWhitelist) require(whitelistedAddress[msg.sender] == true, "You are not whitelisted to mint on this contract"); if(!freeMintAddress[msg.sender]) require(msg.value >= 0.09 * 10**18, "You haven't sent enough ETH to mint."); _tokenIds.increment(); uint256 newItemId = _tokenIds.current(); _mint(msg.sender, newItemId); _setTokenURI(newItemId, string(abi.encodePacked("https://spookles.app/metadata/", "", uint2str(newItemId)))); emit NewItemMinted(msg.sender, newItemId, string(abi.encodePacked("https://spookles.app/metadata/", "", newItemId))); revenueWallet.transfer(msg.value); return newItemId; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"tokenURI","type":"string"}],"name":"NewItemMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"whitelistArray","type":"address[]"},{"internalType":"address[]","name":"freeMintArray","type":"address[]"}],"name":"addAddressesToWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"freeMintItem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintItem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingToMint","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"}]
Contract Creation Code
60806040526001600860006101000a81548160ff02191690831515021790555073cfa20130f90b28aa3c4dec630f0c82f9c2d84661600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200008157600080fd5b506040518060400160405280600881526020017f53706f6f6b6c65730000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f53706f6f6b6c657300000000000000000000000000000000000000000000000081525081600090805190602001906200010692919062000169565b5080600190805190602001906200011f92919062000169565b50505033600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200027e565b828054620001779062000248565b90600052602060002090601f0160209004810192826200019b5760008555620001e7565b82601f10620001b657805160ff1916838001178555620001e7565b82800160010185558215620001e7579182015b82811115620001e6578251825591602001919060010190620001c9565b5b509050620001f69190620001fa565b5090565b5b8082111562000215576000816000905550600101620001fb565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200026157607f821691505b6020821081141562000278576200027762000219565b5b50919050565b613835806200028e6000396000f3fe6080604052600436106100fe5760003560e01c80638cfe35b411610095578063c87b56dd11610064578063c87b56dd14610357578063e985e9c514610394578063eb93406b146103d1578063f02d899b146103ef578063fa6e85831461040d576100fe565b80638cfe35b41461029d57806395d89b41146102da578063a22cb46514610305578063b88d4fde1461032e576100fe565b806323b872dd116100d157806323b872dd146101d157806342842e0e146101fa5780636352211e1461022357806370a0823114610260576100fe565b806301ffc9a71461010357806306fdde0314610140578063081812fc1461016b578063095ea7b3146101a8575b600080fd5b34801561010f57600080fd5b5061012a60048036038101906101259190612256565b610438565b604051610137919061229e565b60405180910390f35b34801561014c57600080fd5b5061015561051a565b6040516101629190612352565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d91906123aa565b6105ac565b60405161019f9190612418565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca919061245f565b610631565b005b3480156101dd57600080fd5b506101f860048036038101906101f3919061249f565b610749565b005b34801561020657600080fd5b50610221600480360381019061021c919061249f565b6107a9565b005b34801561022f57600080fd5b5061024a600480360381019061024591906123aa565b6107c9565b6040516102579190612418565b60405180910390f35b34801561026c57600080fd5b50610287600480360381019061028291906124f2565b61087b565b604051610294919061252e565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906125ae565b610933565b6040516102d1919061229e565b60405180910390f35b3480156102e657600080fd5b506102ef610add565b6040516102fc9190612352565b60405180910390f35b34801561031157600080fd5b5061032c6004803603810190610327919061265b565b610b6f565b005b34801561033a57600080fd5b50610355600480360381019061035091906127cb565b610b85565b005b34801561036357600080fd5b5061037e600480360381019061037991906123aa565b610be7565b60405161038b9190612352565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b6919061284e565b610d39565b6040516103c8919061229e565b60405180910390f35b6103d9610dcd565b6040516103e6919061252e565b60405180910390f35b6103f761102e565b604051610404919061252e565b60405180910390f35b34801561041957600080fd5b506104226112e1565b60405161042f919061252e565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061050357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105135750610512826112ff565b5b9050919050565b606060008054610529906128bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610555906128bd565b80156105a25780601f10610577576101008083540402835291602001916105a2565b820191906000526020600020905b81548152906001019060200180831161058557829003601f168201915b5050505050905090565b60006105b782611369565b6105f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ed90612961565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061063c826107c9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a4906129f3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106cc6113d5565b73ffffffffffffffffffffffffffffffffffffffff1614806106fb57506106fa816106f56113d5565b610d39565b5b61073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073190612a85565b60405180910390fd5b61074483836113dd565b505050565b61075a6107546113d5565b82611496565b610799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079090612b17565b60405180910390fd5b6107a4838383611574565b505050565b6107c483838360405180602001604052806000815250610b85565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086990612ba9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e390612c3b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461098f57600080fd5b60005b85859050811015610a2f576001600a60008888858181106109b6576109b5612c5b565b5b90506020020160208101906109cb91906124f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610a2790612cb9565b915050610992565b5060005b83839050811015610ad0576001600b6000868685818110610a5757610a56612c5b565b5b9050602002016020810190610a6c91906124f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ac890612cb9565b915050610a33565b5060019050949350505050565b606060018054610aec906128bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610b18906128bd565b8015610b655780601f10610b3a57610100808354040283529160200191610b65565b820191906000526020600020905b815481529060010190602001808311610b4857829003601f168201915b5050505050905090565b610b81610b7a6113d5565b83836117d0565b5050565b610b96610b906113d5565b83611496565b610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90612b17565b60405180910390fd5b610be18484848461193d565b50505050565b6060610bf282611369565b610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890612d74565b60405180910390fd5b6000600660008481526020019081526020016000208054610c51906128bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7d906128bd565b8015610cca5780601f10610c9f57610100808354040283529160200191610cca565b820191906000526020600020905b815481529060010190602001808311610cad57829003601f168201915b505050505090506000610cdb611999565b9050600081511415610cf1578192505050610d34565b600082511115610d26578082604051602001610d0e929190612dd0565b60405160208183030381529060405292505050610d34565b610d2f846119b0565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600061012c610ddc6007611a57565b1115610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490612e40565b60405180910390fd5b600860009054906101000a900460ff1615610ec65760011515600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90612ed2565b60405180910390fd5b5b67013fbe85edc90000341015610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0890612f64565b60405180910390fd5b610f1b6007611a65565b6000610f276007611a57565b9050610f333382611a7b565b610f6481610f4083611c49565b604051602001610f509190612ff6565b604051602081830303815290604052611dd2565b7f6807703638a970907822384893184056ff6d0279a11ab9ca6632471df48c0a5f338283604051602001610f989190613044565b604051602081830303815290604052604051610fb693929190613075565b60405180910390a1600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611026573d6000803e3d6000fd5b508091505090565b600061012c61103d6007611a57565b111561107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590612e40565b60405180910390fd5b600860009054906101000a900460ff16156111275760011515600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90612ed2565b60405180910390fd5b5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166111c45767013fbe85edc900003410156111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba90612f64565b60405180910390fd5b5b6111ce6007611a65565b60006111da6007611a57565b90506111e63382611a7b565b611217816111f383611c49565b6040516020016112039190612ff6565b604051602081830303815290604052611dd2565b7f6807703638a970907822384893184056ff6d0279a11ab9ca6632471df48c0a5f33828360405160200161124b9190613044565b60405160208183030381529060405260405161126993929190613075565b60405180910390a1600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156112d9573d6000803e3d6000fd5b508091505090565b60006112ed6007611a57565b61012c6112fa91906130b3565b905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611450836107c9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006114a182611369565b6114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790613159565b60405180910390fd5b60006114eb836107c9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061155a57508373ffffffffffffffffffffffffffffffffffffffff16611542846105ac565b73ffffffffffffffffffffffffffffffffffffffff16145b8061156b575061156a8185610d39565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611594826107c9565b73ffffffffffffffffffffffffffffffffffffffff16146115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e1906131eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561165a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116519061327d565b60405180910390fd5b611665838383611e46565b6116706000826113dd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116c091906130b3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611717919061329d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561183f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118369061333f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611930919061229e565b60405180910390a3505050565b611948848484611574565b61195484848484611e4b565b611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198a906133d1565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606119bb82611369565b6119fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f190613463565b60405180910390fd5b6000611a04611999565b90506000815111611a245760405180602001604052806000815250611a4f565b80611a2e84611fd3565b604051602001611a3f929190612dd0565b6040516020818303038152906040525b915050919050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae2906134cf565b60405180910390fd5b611af481611369565b15611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b9061353b565b60405180910390fd5b611b4060008383611e46565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b90919061329d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60606000821415611c91576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611dcd565b600082905060005b60008214611cc3578080611cac90612cb9565b915050600a82611cbc919061358a565b9150611c99565b60008167ffffffffffffffff811115611cdf57611cde6126a0565b5b6040519080825280601f01601f191660200182016040528015611d115781602001600182028036833780820191505090505b50905060008290505b60008614611dc557600181611d2f91906130b3565b90506000600a8088611d41919061358a565b611d4b91906135bb565b87611d5691906130b3565b6030611d629190613622565b905060008160f81b905080848481518110611d8057611d7f612c5b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a88611dbc919061358a565b97505050611d1a565b819450505050505b919050565b611ddb82611369565b611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e11906136cb565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190611e41929190612147565b505050565b505050565b6000611e6c8473ffffffffffffffffffffffffffffffffffffffff16612134565b15611fc6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e956113d5565b8786866040518563ffffffff1660e01b8152600401611eb79493929190613740565b6020604051808303816000875af1925050508015611ef357506040513d601f19601f82011682018060405250810190611ef091906137a1565b60015b611f76573d8060008114611f23576040519150601f19603f3d011682016040523d82523d6000602084013e611f28565b606091505b50600081511415611f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f65906133d1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611fcb565b600190505b949350505050565b6060600082141561201b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061212f565b600082905060005b6000821461204d57808061203690612cb9565b915050600a82612046919061358a565b9150612023565b60008167ffffffffffffffff811115612069576120686126a0565b5b6040519080825280601f01601f19166020018201604052801561209b5781602001600182028036833780820191505090505b5090505b60008514612128576001826120b491906130b3565b9150600a856120c391906137ce565b60306120cf919061329d565b60f81b8183815181106120e5576120e4612c5b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612121919061358a565b945061209f565b8093505050505b919050565b600080823b905060008111915050919050565b828054612153906128bd565b90600052602060002090601f01602090048101928261217557600085556121bc565b82601f1061218e57805160ff19168380011785556121bc565b828001600101855582156121bc579182015b828111156121bb5782518255916020019190600101906121a0565b5b5090506121c991906121cd565b5090565b5b808211156121e65760008160009055506001016121ce565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612233816121fe565b811461223e57600080fd5b50565b6000813590506122508161222a565b92915050565b60006020828403121561226c5761226b6121f4565b5b600061227a84828501612241565b91505092915050565b60008115159050919050565b61229881612283565b82525050565b60006020820190506122b3600083018461228f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156122f35780820151818401526020810190506122d8565b83811115612302576000848401525b50505050565b6000601f19601f8301169050919050565b6000612324826122b9565b61232e81856122c4565b935061233e8185602086016122d5565b61234781612308565b840191505092915050565b6000602082019050818103600083015261236c8184612319565b905092915050565b6000819050919050565b61238781612374565b811461239257600080fd5b50565b6000813590506123a48161237e565b92915050565b6000602082840312156123c0576123bf6121f4565b5b60006123ce84828501612395565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612402826123d7565b9050919050565b612412816123f7565b82525050565b600060208201905061242d6000830184612409565b92915050565b61243c816123f7565b811461244757600080fd5b50565b60008135905061245981612433565b92915050565b60008060408385031215612476576124756121f4565b5b60006124848582860161244a565b925050602061249585828601612395565b9150509250929050565b6000806000606084860312156124b8576124b76121f4565b5b60006124c68682870161244a565b93505060206124d78682870161244a565b92505060406124e886828701612395565b9150509250925092565b600060208284031215612508576125076121f4565b5b60006125168482850161244a565b91505092915050565b61252881612374565b82525050565b6000602082019050612543600083018461251f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261256e5761256d612549565b5b8235905067ffffffffffffffff81111561258b5761258a61254e565b5b6020830191508360208202830111156125a7576125a6612553565b5b9250929050565b600080600080604085870312156125c8576125c76121f4565b5b600085013567ffffffffffffffff8111156125e6576125e56121f9565b5b6125f287828801612558565b9450945050602085013567ffffffffffffffff811115612615576126146121f9565b5b61262187828801612558565b925092505092959194509250565b61263881612283565b811461264357600080fd5b50565b6000813590506126558161262f565b92915050565b60008060408385031215612672576126716121f4565b5b60006126808582860161244a565b925050602061269185828601612646565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6126d882612308565b810181811067ffffffffffffffff821117156126f7576126f66126a0565b5b80604052505050565b600061270a6121ea565b905061271682826126cf565b919050565b600067ffffffffffffffff821115612736576127356126a0565b5b61273f82612308565b9050602081019050919050565b82818337600083830152505050565b600061276e6127698461271b565b612700565b90508281526020810184848401111561278a5761278961269b565b5b61279584828561274c565b509392505050565b600082601f8301126127b2576127b1612549565b5b81356127c284826020860161275b565b91505092915050565b600080600080608085870312156127e5576127e46121f4565b5b60006127f38782880161244a565b94505060206128048782880161244a565b935050604061281587828801612395565b925050606085013567ffffffffffffffff811115612836576128356121f9565b5b6128428782880161279d565b91505092959194509250565b60008060408385031215612865576128646121f4565b5b60006128738582860161244a565b92505060206128848582860161244a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806128d557607f821691505b602082108114156128e9576128e861288e565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061294b602c836122c4565b9150612956826128ef565b604082019050919050565b6000602082019050818103600083015261297a8161293e565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006129dd6021836122c4565b91506129e882612981565b604082019050919050565b60006020820190508181036000830152612a0c816129d0565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612a6f6038836122c4565b9150612a7a82612a13565b604082019050919050565b60006020820190508181036000830152612a9e81612a62565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612b016031836122c4565b9150612b0c82612aa5565b604082019050919050565b60006020820190508181036000830152612b3081612af4565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612b936029836122c4565b9150612b9e82612b37565b604082019050919050565b60006020820190508181036000830152612bc281612b86565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612c25602a836122c4565b9150612c3082612bc9565b604082019050919050565b60006020820190508181036000830152612c5481612c18565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612cc482612374565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612cf757612cf6612c8a565b5b600182019050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b6000612d5e6031836122c4565b9150612d6982612d02565b604082019050919050565b60006020820190508181036000830152612d8d81612d51565b9050919050565b600081905092915050565b6000612daa826122b9565b612db48185612d94565b9350612dc48185602086016122d5565b80840191505092915050565b6000612ddc8285612d9f565b9150612de88284612d9f565b91508190509392505050565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b6000612e2a601b836122c4565b9150612e3582612df4565b602082019050919050565b60006020820190508181036000830152612e5981612e1d565b9050919050565b7f596f7520617265206e6f742077686974656c697374656420746f206d696e742060008201527f6f6e207468697320636f6e747261637400000000000000000000000000000000602082015250565b6000612ebc6030836122c4565b9150612ec782612e60565b604082019050919050565b60006020820190508181036000830152612eeb81612eaf565b9050919050565b7f596f7520686176656e27742073656e7420656e6f7567682045544820746f206d60008201527f696e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000612f4e6024836122c4565b9150612f5982612ef2565b604082019050919050565b60006020820190508181036000830152612f7d81612f41565b9050919050565b7f68747470733a2f2f73706f6f6b6c65732e6170702f6d657461646174612f0000600082015250565b6000612fba601e83612d94565b9150612fc582612f84565b601e82019050919050565b50565b6000612fe0600083612d94565b9150612feb82612fd0565b600082019050919050565b600061300182612fad565b915061300c82612fd3565b91506130188284612d9f565b915081905092915050565b6000819050919050565b61303e61303982612374565b613023565b82525050565b600061304f82612fad565b915061305a82612fd3565b9150613066828461302d565b60208201915081905092915050565b600060608201905061308a6000830186612409565b613097602083018561251f565b81810360408301526130a98184612319565b9050949350505050565b60006130be82612374565b91506130c983612374565b9250828210156130dc576130db612c8a565b5b828203905092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613143602c836122c4565b915061314e826130e7565b604082019050919050565b6000602082019050818103600083015261317281613136565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006131d56029836122c4565b91506131e082613179565b604082019050919050565b60006020820190508181036000830152613204816131c8565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006132676024836122c4565b91506132728261320b565b604082019050919050565b600060208201905081810360008301526132968161325a565b9050919050565b60006132a882612374565b91506132b383612374565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132e8576132e7612c8a565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006133296019836122c4565b9150613334826132f3565b602082019050919050565b600060208201905081810360008301526133588161331c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006133bb6032836122c4565b91506133c68261335f565b604082019050919050565b600060208201905081810360008301526133ea816133ae565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061344d602f836122c4565b9150613458826133f1565b604082019050919050565b6000602082019050818103600083015261347c81613440565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006134b96020836122c4565b91506134c482613483565b602082019050919050565b600060208201905081810360008301526134e8816134ac565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613525601c836122c4565b9150613530826134ef565b602082019050919050565b6000602082019050818103600083015261355481613518565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061359582612374565b91506135a083612374565b9250826135b0576135af61355b565b5b828204905092915050565b60006135c682612374565b91506135d183612374565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561360a57613609612c8a565b5b828202905092915050565b600060ff82169050919050565b600061362d82613615565b915061363883613615565b92508260ff0382111561364e5761364d612c8a565b5b828201905092915050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b60006136b5602e836122c4565b91506136c082613659565b604082019050919050565b600060208201905081810360008301526136e4816136a8565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613712826136eb565b61371c81856136f6565b935061372c8185602086016122d5565b61373581612308565b840191505092915050565b60006080820190506137556000830187612409565b6137626020830186612409565b61376f604083018561251f565b81810360608301526137818184613707565b905095945050505050565b60008151905061379b8161222a565b92915050565b6000602082840312156137b7576137b66121f4565b5b60006137c58482850161378c565b91505092915050565b60006137d982612374565b91506137e483612374565b9250826137f4576137f361355b565b5b82820690509291505056fea26469706673582212204a537db99d3a29eecb11f8df0082380d321860fc9e29cb06b973b71e5b6b68e264736f6c634300080a0033
Deployed Bytecode
0x6080604052600436106100fe5760003560e01c80638cfe35b411610095578063c87b56dd11610064578063c87b56dd14610357578063e985e9c514610394578063eb93406b146103d1578063f02d899b146103ef578063fa6e85831461040d576100fe565b80638cfe35b41461029d57806395d89b41146102da578063a22cb46514610305578063b88d4fde1461032e576100fe565b806323b872dd116100d157806323b872dd146101d157806342842e0e146101fa5780636352211e1461022357806370a0823114610260576100fe565b806301ffc9a71461010357806306fdde0314610140578063081812fc1461016b578063095ea7b3146101a8575b600080fd5b34801561010f57600080fd5b5061012a60048036038101906101259190612256565b610438565b604051610137919061229e565b60405180910390f35b34801561014c57600080fd5b5061015561051a565b6040516101629190612352565b60405180910390f35b34801561017757600080fd5b50610192600480360381019061018d91906123aa565b6105ac565b60405161019f9190612418565b60405180910390f35b3480156101b457600080fd5b506101cf60048036038101906101ca919061245f565b610631565b005b3480156101dd57600080fd5b506101f860048036038101906101f3919061249f565b610749565b005b34801561020657600080fd5b50610221600480360381019061021c919061249f565b6107a9565b005b34801561022f57600080fd5b5061024a600480360381019061024591906123aa565b6107c9565b6040516102579190612418565b60405180910390f35b34801561026c57600080fd5b50610287600480360381019061028291906124f2565b61087b565b604051610294919061252e565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906125ae565b610933565b6040516102d1919061229e565b60405180910390f35b3480156102e657600080fd5b506102ef610add565b6040516102fc9190612352565b60405180910390f35b34801561031157600080fd5b5061032c6004803603810190610327919061265b565b610b6f565b005b34801561033a57600080fd5b50610355600480360381019061035091906127cb565b610b85565b005b34801561036357600080fd5b5061037e600480360381019061037991906123aa565b610be7565b60405161038b9190612352565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b6919061284e565b610d39565b6040516103c8919061229e565b60405180910390f35b6103d9610dcd565b6040516103e6919061252e565b60405180910390f35b6103f761102e565b604051610404919061252e565b60405180910390f35b34801561041957600080fd5b506104226112e1565b60405161042f919061252e565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061050357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105135750610512826112ff565b5b9050919050565b606060008054610529906128bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610555906128bd565b80156105a25780601f10610577576101008083540402835291602001916105a2565b820191906000526020600020905b81548152906001019060200180831161058557829003601f168201915b5050505050905090565b60006105b782611369565b6105f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ed90612961565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061063c826107c9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a4906129f3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166106cc6113d5565b73ffffffffffffffffffffffffffffffffffffffff1614806106fb57506106fa816106f56113d5565b610d39565b5b61073a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073190612a85565b60405180910390fd5b61074483836113dd565b505050565b61075a6107546113d5565b82611496565b610799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079090612b17565b60405180910390fd5b6107a4838383611574565b505050565b6107c483838360405180602001604052806000815250610b85565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610872576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086990612ba9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156108ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e390612c3b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461098f57600080fd5b60005b85859050811015610a2f576001600a60008888858181106109b6576109b5612c5b565b5b90506020020160208101906109cb91906124f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610a2790612cb9565b915050610992565b5060005b83839050811015610ad0576001600b6000868685818110610a5757610a56612c5b565b5b9050602002016020810190610a6c91906124f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ac890612cb9565b915050610a33565b5060019050949350505050565b606060018054610aec906128bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610b18906128bd565b8015610b655780601f10610b3a57610100808354040283529160200191610b65565b820191906000526020600020905b815481529060010190602001808311610b4857829003601f168201915b5050505050905090565b610b81610b7a6113d5565b83836117d0565b5050565b610b96610b906113d5565b83611496565b610bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcc90612b17565b60405180910390fd5b610be18484848461193d565b50505050565b6060610bf282611369565b610c31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2890612d74565b60405180910390fd5b6000600660008481526020019081526020016000208054610c51906128bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7d906128bd565b8015610cca5780601f10610c9f57610100808354040283529160200191610cca565b820191906000526020600020905b815481529060010190602001808311610cad57829003601f168201915b505050505090506000610cdb611999565b9050600081511415610cf1578192505050610d34565b600082511115610d26578082604051602001610d0e929190612dd0565b60405160208183030381529060405292505050610d34565b610d2f846119b0565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600061012c610ddc6007611a57565b1115610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490612e40565b60405180910390fd5b600860009054906101000a900460ff1615610ec65760011515600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebc90612ed2565b60405180910390fd5b5b67013fbe85edc90000341015610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0890612f64565b60405180910390fd5b610f1b6007611a65565b6000610f276007611a57565b9050610f333382611a7b565b610f6481610f4083611c49565b604051602001610f509190612ff6565b604051602081830303815290604052611dd2565b7f6807703638a970907822384893184056ff6d0279a11ab9ca6632471df48c0a5f338283604051602001610f989190613044565b604051602081830303815290604052604051610fb693929190613075565b60405180910390a1600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015611026573d6000803e3d6000fd5b508091505090565b600061012c61103d6007611a57565b111561107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590612e40565b60405180910390fd5b600860009054906101000a900460ff16156111275760011515600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d90612ed2565b60405180910390fd5b5b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166111c45767013fbe85edc900003410156111c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ba90612f64565b60405180910390fd5b5b6111ce6007611a65565b60006111da6007611a57565b90506111e63382611a7b565b611217816111f383611c49565b6040516020016112039190612ff6565b604051602081830303815290604052611dd2565b7f6807703638a970907822384893184056ff6d0279a11ab9ca6632471df48c0a5f33828360405160200161124b9190613044565b60405160208183030381529060405260405161126993929190613075565b60405180910390a1600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156112d9573d6000803e3d6000fd5b508091505090565b60006112ed6007611a57565b61012c6112fa91906130b3565b905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611450836107c9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006114a182611369565b6114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790613159565b60405180910390fd5b60006114eb836107c9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061155a57508373ffffffffffffffffffffffffffffffffffffffff16611542846105ac565b73ffffffffffffffffffffffffffffffffffffffff16145b8061156b575061156a8185610d39565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611594826107c9565b73ffffffffffffffffffffffffffffffffffffffff16146115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e1906131eb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561165a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116519061327d565b60405180910390fd5b611665838383611e46565b6116706000826113dd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116c091906130b3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611717919061329d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561183f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118369061333f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611930919061229e565b60405180910390a3505050565b611948848484611574565b61195484848484611e4b565b611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198a906133d1565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606119bb82611369565b6119fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f190613463565b60405180910390fd5b6000611a04611999565b90506000815111611a245760405180602001604052806000815250611a4f565b80611a2e84611fd3565b604051602001611a3f929190612dd0565b6040516020818303038152906040525b915050919050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae2906134cf565b60405180910390fd5b611af481611369565b15611b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2b9061353b565b60405180910390fd5b611b4060008383611e46565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b90919061329d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60606000821415611c91576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611dcd565b600082905060005b60008214611cc3578080611cac90612cb9565b915050600a82611cbc919061358a565b9150611c99565b60008167ffffffffffffffff811115611cdf57611cde6126a0565b5b6040519080825280601f01601f191660200182016040528015611d115781602001600182028036833780820191505090505b50905060008290505b60008614611dc557600181611d2f91906130b3565b90506000600a8088611d41919061358a565b611d4b91906135bb565b87611d5691906130b3565b6030611d629190613622565b905060008160f81b905080848481518110611d8057611d7f612c5b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a88611dbc919061358a565b97505050611d1a565b819450505050505b919050565b611ddb82611369565b611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e11906136cb565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190611e41929190612147565b505050565b505050565b6000611e6c8473ffffffffffffffffffffffffffffffffffffffff16612134565b15611fc6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e956113d5565b8786866040518563ffffffff1660e01b8152600401611eb79493929190613740565b6020604051808303816000875af1925050508015611ef357506040513d601f19601f82011682018060405250810190611ef091906137a1565b60015b611f76573d8060008114611f23576040519150601f19603f3d011682016040523d82523d6000602084013e611f28565b606091505b50600081511415611f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f65906133d1565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611fcb565b600190505b949350505050565b6060600082141561201b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061212f565b600082905060005b6000821461204d57808061203690612cb9565b915050600a82612046919061358a565b9150612023565b60008167ffffffffffffffff811115612069576120686126a0565b5b6040519080825280601f01601f19166020018201604052801561209b5781602001600182028036833780820191505090505b5090505b60008514612128576001826120b491906130b3565b9150600a856120c391906137ce565b60306120cf919061329d565b60f81b8183815181106120e5576120e4612c5b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612121919061358a565b945061209f565b8093505050505b919050565b600080823b905060008111915050919050565b828054612153906128bd565b90600052602060002090601f01602090048101928261217557600085556121bc565b82601f1061218e57805160ff19168380011785556121bc565b828001600101855582156121bc579182015b828111156121bb5782518255916020019190600101906121a0565b5b5090506121c991906121cd565b5090565b5b808211156121e65760008160009055506001016121ce565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612233816121fe565b811461223e57600080fd5b50565b6000813590506122508161222a565b92915050565b60006020828403121561226c5761226b6121f4565b5b600061227a84828501612241565b91505092915050565b60008115159050919050565b61229881612283565b82525050565b60006020820190506122b3600083018461228f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156122f35780820151818401526020810190506122d8565b83811115612302576000848401525b50505050565b6000601f19601f8301169050919050565b6000612324826122b9565b61232e81856122c4565b935061233e8185602086016122d5565b61234781612308565b840191505092915050565b6000602082019050818103600083015261236c8184612319565b905092915050565b6000819050919050565b61238781612374565b811461239257600080fd5b50565b6000813590506123a48161237e565b92915050565b6000602082840312156123c0576123bf6121f4565b5b60006123ce84828501612395565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612402826123d7565b9050919050565b612412816123f7565b82525050565b600060208201905061242d6000830184612409565b92915050565b61243c816123f7565b811461244757600080fd5b50565b60008135905061245981612433565b92915050565b60008060408385031215612476576124756121f4565b5b60006124848582860161244a565b925050602061249585828601612395565b9150509250929050565b6000806000606084860312156124b8576124b76121f4565b5b60006124c68682870161244a565b93505060206124d78682870161244a565b92505060406124e886828701612395565b9150509250925092565b600060208284031215612508576125076121f4565b5b60006125168482850161244a565b91505092915050565b61252881612374565b82525050565b6000602082019050612543600083018461251f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261256e5761256d612549565b5b8235905067ffffffffffffffff81111561258b5761258a61254e565b5b6020830191508360208202830111156125a7576125a6612553565b5b9250929050565b600080600080604085870312156125c8576125c76121f4565b5b600085013567ffffffffffffffff8111156125e6576125e56121f9565b5b6125f287828801612558565b9450945050602085013567ffffffffffffffff811115612615576126146121f9565b5b61262187828801612558565b925092505092959194509250565b61263881612283565b811461264357600080fd5b50565b6000813590506126558161262f565b92915050565b60008060408385031215612672576126716121f4565b5b60006126808582860161244a565b925050602061269185828601612646565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6126d882612308565b810181811067ffffffffffffffff821117156126f7576126f66126a0565b5b80604052505050565b600061270a6121ea565b905061271682826126cf565b919050565b600067ffffffffffffffff821115612736576127356126a0565b5b61273f82612308565b9050602081019050919050565b82818337600083830152505050565b600061276e6127698461271b565b612700565b90508281526020810184848401111561278a5761278961269b565b5b61279584828561274c565b509392505050565b600082601f8301126127b2576127b1612549565b5b81356127c284826020860161275b565b91505092915050565b600080600080608085870312156127e5576127e46121f4565b5b60006127f38782880161244a565b94505060206128048782880161244a565b935050604061281587828801612395565b925050606085013567ffffffffffffffff811115612836576128356121f9565b5b6128428782880161279d565b91505092959194509250565b60008060408385031215612865576128646121f4565b5b60006128738582860161244a565b92505060206128848582860161244a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806128d557607f821691505b602082108114156128e9576128e861288e565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061294b602c836122c4565b9150612956826128ef565b604082019050919050565b6000602082019050818103600083015261297a8161293e565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006129dd6021836122c4565b91506129e882612981565b604082019050919050565b60006020820190508181036000830152612a0c816129d0565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612a6f6038836122c4565b9150612a7a82612a13565b604082019050919050565b60006020820190508181036000830152612a9e81612a62565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612b016031836122c4565b9150612b0c82612aa5565b604082019050919050565b60006020820190508181036000830152612b3081612af4565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612b936029836122c4565b9150612b9e82612b37565b604082019050919050565b60006020820190508181036000830152612bc281612b86565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612c25602a836122c4565b9150612c3082612bc9565b604082019050919050565b60006020820190508181036000830152612c5481612c18565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612cc482612374565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612cf757612cf6612c8a565b5b600182019050919050565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b6000612d5e6031836122c4565b9150612d6982612d02565b604082019050919050565b60006020820190508181036000830152612d8d81612d51565b9050919050565b600081905092915050565b6000612daa826122b9565b612db48185612d94565b9350612dc48185602086016122d5565b80840191505092915050565b6000612ddc8285612d9f565b9150612de88284612d9f565b91508190509392505050565b7f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000600082015250565b6000612e2a601b836122c4565b9150612e3582612df4565b602082019050919050565b60006020820190508181036000830152612e5981612e1d565b9050919050565b7f596f7520617265206e6f742077686974656c697374656420746f206d696e742060008201527f6f6e207468697320636f6e747261637400000000000000000000000000000000602082015250565b6000612ebc6030836122c4565b9150612ec782612e60565b604082019050919050565b60006020820190508181036000830152612eeb81612eaf565b9050919050565b7f596f7520686176656e27742073656e7420656e6f7567682045544820746f206d60008201527f696e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000612f4e6024836122c4565b9150612f5982612ef2565b604082019050919050565b60006020820190508181036000830152612f7d81612f41565b9050919050565b7f68747470733a2f2f73706f6f6b6c65732e6170702f6d657461646174612f0000600082015250565b6000612fba601e83612d94565b9150612fc582612f84565b601e82019050919050565b50565b6000612fe0600083612d94565b9150612feb82612fd0565b600082019050919050565b600061300182612fad565b915061300c82612fd3565b91506130188284612d9f565b915081905092915050565b6000819050919050565b61303e61303982612374565b613023565b82525050565b600061304f82612fad565b915061305a82612fd3565b9150613066828461302d565b60208201915081905092915050565b600060608201905061308a6000830186612409565b613097602083018561251f565b81810360408301526130a98184612319565b9050949350505050565b60006130be82612374565b91506130c983612374565b9250828210156130dc576130db612c8a565b5b828203905092915050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613143602c836122c4565b915061314e826130e7565b604082019050919050565b6000602082019050818103600083015261317281613136565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006131d56029836122c4565b91506131e082613179565b604082019050919050565b60006020820190508181036000830152613204816131c8565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006132676024836122c4565b91506132728261320b565b604082019050919050565b600060208201905081810360008301526132968161325a565b9050919050565b60006132a882612374565b91506132b383612374565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156132e8576132e7612c8a565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006133296019836122c4565b9150613334826132f3565b602082019050919050565b600060208201905081810360008301526133588161331c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006133bb6032836122c4565b91506133c68261335f565b604082019050919050565b600060208201905081810360008301526133ea816133ae565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061344d602f836122c4565b9150613458826133f1565b604082019050919050565b6000602082019050818103600083015261347c81613440565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006134b96020836122c4565b91506134c482613483565b602082019050919050565b600060208201905081810360008301526134e8816134ac565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613525601c836122c4565b9150613530826134ef565b602082019050919050565b6000602082019050818103600083015261355481613518565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061359582612374565b91506135a083612374565b9250826135b0576135af61355b565b5b828204905092915050565b60006135c682612374565b91506135d183612374565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561360a57613609612c8a565b5b828202905092915050565b600060ff82169050919050565b600061362d82613615565b915061363883613615565b92508260ff0382111561364e5761364d612c8a565b5b828201905092915050565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b60006136b5602e836122c4565b91506136c082613659565b604082019050919050565b600060208201905081810360008301526136e4816136a8565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613712826136eb565b61371c81856136f6565b935061372c8185602086016122d5565b61373581612308565b840191505092915050565b60006080820190506137556000830187612409565b6137626020830186612409565b61376f604083018561251f565b81810360608301526137818184613707565b905095945050505050565b60008151905061379b8161222a565b92915050565b6000602082840312156137b7576137b66121f4565b5b60006137c58482850161378c565b91505092915050565b60006137d982612374565b91506137e483612374565b9250826137f4576137f361355b565b5b82820690509291505056fea26469706673582212204a537db99d3a29eecb11f8df0082380d321860fc9e29cb06b973b71e5b6b68e264736f6c634300080a0033
Deployed Bytecode Sourcemap
37193:3499:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22677:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23622:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25181:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24704:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25931:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26341:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23316:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23046:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37770:478;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23791:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25474:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26597:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35628:679;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25700:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38970:835;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39817:872;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38256:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22677:305;22779:4;22831:25;22816:40;;;:11;:40;;;;:105;;;;22888:33;22873:48;;;:11;:48;;;;22816:105;:158;;;;22938:36;22962:11;22938:23;:36::i;:::-;22816:158;22796:178;;22677:305;;;:::o;23622:100::-;23676:13;23709:5;23702:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23622:100;:::o;25181:221::-;25257:7;25285:16;25293:7;25285;:16::i;:::-;25277:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25370:15;:24;25386:7;25370:24;;;;;;;;;;;;;;;;;;;;;25363:31;;25181:221;;;:::o;24704:411::-;24785:13;24801:23;24816:7;24801:14;:23::i;:::-;24785:39;;24849:5;24843:11;;:2;:11;;;;24835:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24943:5;24927:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24952:37;24969:5;24976:12;:10;:12::i;:::-;24952:16;:37::i;:::-;24927:62;24905:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25086:21;25095:2;25099:7;25086:8;:21::i;:::-;24774:341;24704:411;;:::o;25931:339::-;26126:41;26145:12;:10;:12::i;:::-;26159:7;26126:18;:41::i;:::-;26118:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26234:28;26244:4;26250:2;26254:7;26234:9;:28::i;:::-;25931:339;;;:::o;26341:185::-;26479:39;26496:4;26502:2;26506:7;26479:39;;;;;;;;;;;;:16;:39::i;:::-;26341:185;;;:::o;23316:239::-;23388:7;23408:13;23424:7;:16;23432:7;23424:16;;;;;;;;;;;;;;;;;;;;;23408:32;;23476:1;23459:19;;:5;:19;;;;23451:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23542:5;23535:12;;;23316:239;;;:::o;23046:208::-;23118:7;23163:1;23146:19;;:5;:19;;;;23138:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23230:9;:16;23240:5;23230:16;;;;;;;;;;;;;;;;23223:23;;23046:208;;;:::o;37770:478::-;37888:4;37932:16;;;;;;;;;;;37918:30;;:10;:30;;;37910:39;;;;;;37964:6;37960:126;37978:14;;:21;;37974:1;:25;37960:126;;;38070:4;38030:18;:37;38049:14;;38064:1;38049:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;38030:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;38001:3;;;;;:::i;:::-;;;;37960:126;;;;38102:6;38098:121;38116:13;;:20;;38112:1;:24;38098:121;;;38203:4;38167:15;:33;38183:13;;38197:1;38183:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;38167:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;38138:3;;;;;:::i;:::-;;;;38098:121;;;;38236:4;38229:11;;37770:478;;;;;;:::o;23791:104::-;23847:13;23880:7;23873:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23791:104;:::o;25474:155::-;25569:52;25588:12;:10;:12::i;:::-;25602:8;25612;25569:18;:52::i;:::-;25474:155;;:::o;26597:328::-;26772:41;26791:12;:10;:12::i;:::-;26805:7;26772:18;:41::i;:::-;26764:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26878:39;26892:4;26898:2;26902:7;26911:5;26878:13;:39::i;:::-;26597:328;;;;:::o;35628:679::-;35701:13;35735:16;35743:7;35735;:16::i;:::-;35727:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;35818:23;35844:10;:19;35855:7;35844:19;;;;;;;;;;;35818:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35874:18;35895:10;:8;:10::i;:::-;35874:31;;36003:1;35987:4;35981:18;:23;35977:72;;;36028:9;36021:16;;;;;;35977:72;36179:1;36159:9;36153:23;:27;36149:108;;;36228:4;36234:9;36211:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36197:48;;;;;;36149:108;36276:23;36291:7;36276:14;:23::i;:::-;36269:30;;;;35628:679;;;;:::o;25700:164::-;25797:4;25821:18;:25;25840:5;25821:25;;;;;;;;;;;;;;;:35;25847:8;25821:35;;;;;;;;;;;;;;;;;;;;;;;;;25814:42;;25700:164;;;;:::o;38970:835::-;39041:7;39099:3;39076:19;:9;:17;:19::i;:::-;:26;;39068:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39148:16;;;;;;;;;;;39145:120;;;39208:4;39174:38;;:18;:30;39193:10;39174:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;39166:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;39145:120;39297:13;39284:9;:26;;39276:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39362:21;:9;:19;:21::i;:::-;39396:17;39416:19;:9;:17;:19::i;:::-;39396:39;;39446:28;39452:10;39464:9;39446:5;:28::i;:::-;39485:108;39498:9;39571:19;39580:9;39571:8;:19::i;:::-;39516:75;;;;;;;;:::i;:::-;;;;;;;;;;;;;39485:12;:108::i;:::-;39611:111;39625:10;39637:9;39710;39655:65;;;;;;;;:::i;:::-;;;;;;;;;;;;;39611:111;;;;;;;;:::i;:::-;;;;;;;;39735:13;;;;;;;;;;;:22;;:33;39758:9;39735:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39788:9;39781:16;;;38970:835;:::o;39817:872::-;39892:7;39950:3;39927:19;:9;:17;:19::i;:::-;:26;;39919:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39999:16;;;;;;;;;;;39996:120;;;40059:4;40025:38;;:18;:30;40044:10;40025:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;40017:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;39996:120;40131:15;:27;40147:10;40131:27;;;;;;;;;;;;;;;;;;;;;;;;;40127:108;;40181:13;40168:9;:26;;40160:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;40127:108;40246:21;:9;:19;:21::i;:::-;40280:17;40300:19;:9;:17;:19::i;:::-;40280:39;;40330:28;40336:10;40348:9;40330:5;:28::i;:::-;40369:108;40382:9;40455:19;40464:9;40455:8;:19::i;:::-;40400:75;;;;;;;;:::i;:::-;;;;;;;;;;;;;40369:12;:108::i;:::-;40495:111;40509:10;40521:9;40594;40539:65;;;;;;;;:::i;:::-;;;;;;;;;;;;;40495:111;;;;;;;;:::i;:::-;;;;;;;;40619:13;;;;;;;;;;;:22;;:33;40642:9;40619:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40672:9;40665:16;;;39817:872;:::o;38256:115::-;38304:7;38343:19;:9;:17;:19::i;:::-;38337:3;:25;;;;:::i;:::-;38329:34;;38256:115;:::o;15446:157::-;15531:4;15570:25;15555:40;;;:11;:40;;;;15548:47;;15446:157;;;:::o;28435:127::-;28500:4;28552:1;28524:30;;:7;:16;28532:7;28524:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28517:37;;28435:127;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;32417:174::-;32519:2;32492:15;:24;32508:7;32492:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32575:7;32571:2;32537:46;;32546:23;32561:7;32546:14;:23::i;:::-;32537:46;;;;;;;;;;;;32417:174;;:::o;28729:348::-;28822:4;28847:16;28855:7;28847;:16::i;:::-;28839:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28923:13;28939:23;28954:7;28939:14;:23::i;:::-;28923:39;;28992:5;28981:16;;:7;:16;;;:51;;;;29025:7;29001:31;;:20;29013:7;29001:11;:20::i;:::-;:31;;;28981:51;:87;;;;29036:32;29053:5;29060:7;29036:16;:32::i;:::-;28981:87;28973:96;;;28729:348;;;;:::o;31721:578::-;31880:4;31853:31;;:23;31868:7;31853:14;:23::i;:::-;:31;;;31845:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31963:1;31949:16;;:2;:16;;;;31941:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32019:39;32040:4;32046:2;32050:7;32019:20;:39::i;:::-;32123:29;32140:1;32144:7;32123:8;:29::i;:::-;32184:1;32165:9;:15;32175:4;32165:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32213:1;32196:9;:13;32206:2;32196:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32244:2;32225:7;:16;32233:7;32225:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32283:7;32279:2;32264:27;;32273:4;32264:27;;;;;;;;;;;;31721:578;;;:::o;32733:315::-;32888:8;32879:17;;:5;:17;;;;32871:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32975:8;32937:18;:25;32956:5;32937:25;;;;;;;;;;;;;;;:35;32963:8;32937:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33021:8;32999:41;;33014:5;32999:41;;;33031:8;32999:41;;;;;;:::i;:::-;;;;;;;;32733:315;;;:::o;27807:::-;27964:28;27974:4;27980:2;27984:7;27964:9;:28::i;:::-;28011:48;28034:4;28040:2;28044:7;28053:5;28011:22;:48::i;:::-;28003:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27807:315;;;;:::o;24548:94::-;24599:13;24625:9;;;;;;;;;;;;;;24548:94;:::o;23966:334::-;24039:13;24073:16;24081:7;24073;:16::i;:::-;24065:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24154:21;24178:10;:8;:10::i;:::-;24154:34;;24230:1;24212:7;24206:21;:25;:86;;;;;;;;;;;;;;;;;24258:7;24267:18;:7;:16;:18::i;:::-;24241:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24206:86;24199:93;;;23966:334;;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;30413:382::-;30507:1;30493:16;;:2;:16;;;;30485:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30566:16;30574:7;30566;:16::i;:::-;30565:17;30557:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30628:45;30657:1;30661:2;30665:7;30628:20;:45::i;:::-;30703:1;30686:9;:13;30696:2;30686:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30734:2;30715:7;:16;30723:7;30715:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30779:7;30775:2;30754:33;;30771:1;30754:33;;;;;;;;;;;;30413:382;;:::o;38383:573::-;38433:27;38483:1;38477:2;:7;38473:50;;;38501:10;;;;;;;;;;;;;;;;;;;;;38473:50;38533:6;38542:2;38533:11;;38555:8;38574:69;38586:1;38581;:6;38574:69;;38604:5;;;;;:::i;:::-;;;;38629:2;38624:7;;;;;:::i;:::-;;;38574:69;;;38653:17;38683:3;38673:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38653:34;;38698:6;38707:3;38698:12;;38721:198;38734:1;38728:2;:7;38721:198;;38758:1;38756;:3;;;;:::i;:::-;38752:7;;38774:10;38814:2;38809;38804;:7;;;;:::i;:::-;:12;;;;:::i;:::-;38799:2;:17;;;;:::i;:::-;38788:2;:29;;;;:::i;:::-;38774:44;;38833:9;38852:4;38845:12;;38833:24;;38882:2;38872:4;38877:1;38872:7;;;;;;;;:::i;:::-;;;;;:12;;;;;;;;;;;38905:2;38899:8;;;;;:::i;:::-;;;38737:182;;38721:198;;;38943:4;38929:19;;;;;;38383:573;;;;:::o;36463:217::-;36563:16;36571:7;36563;:16::i;:::-;36555:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;36663:9;36641:10;:19;36652:7;36641:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;36463:217;;:::o;34984:126::-;;;;:::o;33613:799::-;33768:4;33789:15;:2;:13;;;:15::i;:::-;33785:620;;;33841:2;33825:36;;;33862:12;:10;:12::i;:::-;33876:4;33882:7;33891:5;33825:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33821:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34084:1;34067:6;:13;:18;34063:272;;;34110:60;;;;;;;;;;:::i;:::-;;;;;;;;34063:272;34285:6;34279:13;34270:6;34266:2;34262:15;34255:38;33821:529;33958:41;;;33948:51;;;:6;:51;;;;33941:58;;;;;33785:620;34389:4;34382:11;;33613:799;;;;;;;:::o;1830:723::-;1886:13;2116:1;2107:5;:10;2103:53;;;2134:10;;;;;;;;;;;;;;;;;;;;;2103:53;2166:12;2181:5;2166:20;;2197:14;2222:78;2237:1;2229:4;:9;2222:78;;2255:8;;;;;:::i;:::-;;;;2286:2;2278:10;;;;;:::i;:::-;;;2222:78;;;2310:19;2342:6;2332:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:39;;2360:154;2376:1;2367:5;:10;2360:154;;2404:1;2394:11;;;;;:::i;:::-;;;2471:2;2463:5;:10;;;;:::i;:::-;2450:2;:24;;;;:::i;:::-;2437:39;;2420:6;2427;2420:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2500:2;2491:11;;;;;:::i;:::-;;;2360:154;;;2538:6;2524:21;;;;;1830:723;;;;:::o;5302:387::-;5362:4;5570:12;5637:7;5625:20;5617:28;;5680:1;5673:4;:8;5666:15;;;5302:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:619::-;5015:6;5023;5031;5080:2;5068:9;5059:7;5055:23;5051:32;5048:119;;;5086:79;;:::i;:::-;5048:119;5206:1;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5177:117;5333:2;5359:53;5404:7;5395:6;5384:9;5380:22;5359:53;:::i;:::-;5349:63;;5304:118;5461:2;5487:53;5532:7;5523:6;5512:9;5508:22;5487:53;:::i;:::-;5477:63;;5432:118;4938:619;;;;;:::o;5563:329::-;5622:6;5671:2;5659:9;5650:7;5646:23;5642:32;5639:119;;;5677:79;;:::i;:::-;5639:119;5797:1;5822:53;5867:7;5858:6;5847:9;5843:22;5822:53;:::i;:::-;5812:63;;5768:117;5563:329;;;;:::o;5898:118::-;5985:24;6003:5;5985:24;:::i;:::-;5980:3;5973:37;5898:118;;:::o;6022:222::-;6115:4;6153:2;6142:9;6138:18;6130:26;;6166:71;6234:1;6223:9;6219:17;6210:6;6166:71;:::i;:::-;6022:222;;;;:::o;6250:117::-;6359:1;6356;6349:12;6373:117;6482:1;6479;6472:12;6496:117;6605:1;6602;6595:12;6636:568;6709:8;6719:6;6769:3;6762:4;6754:6;6750:17;6746:27;6736:122;;6777:79;;:::i;:::-;6736:122;6890:6;6877:20;6867:30;;6920:18;6912:6;6909:30;6906:117;;;6942:79;;:::i;:::-;6906:117;7056:4;7048:6;7044:17;7032:29;;7110:3;7102:4;7094:6;7090:17;7080:8;7076:32;7073:41;7070:128;;;7117:79;;:::i;:::-;7070:128;6636:568;;;;;:::o;7210:934::-;7332:6;7340;7348;7356;7405:2;7393:9;7384:7;7380:23;7376:32;7373:119;;;7411:79;;:::i;:::-;7373:119;7559:1;7548:9;7544:17;7531:31;7589:18;7581:6;7578:30;7575:117;;;7611:79;;:::i;:::-;7575:117;7724:80;7796:7;7787:6;7776:9;7772:22;7724:80;:::i;:::-;7706:98;;;;7502:312;7881:2;7870:9;7866:18;7853:32;7912:18;7904:6;7901:30;7898:117;;;7934:79;;:::i;:::-;7898:117;8047:80;8119:7;8110:6;8099:9;8095:22;8047:80;:::i;:::-;8029:98;;;;7824:313;7210:934;;;;;;;:::o;8150:116::-;8220:21;8235:5;8220:21;:::i;:::-;8213:5;8210:32;8200:60;;8256:1;8253;8246:12;8200:60;8150:116;:::o;8272:133::-;8315:5;8353:6;8340:20;8331:29;;8369:30;8393:5;8369:30;:::i;:::-;8272:133;;;;:::o;8411:468::-;8476:6;8484;8533:2;8521:9;8512:7;8508:23;8504:32;8501:119;;;8539:79;;:::i;:::-;8501:119;8659:1;8684:53;8729:7;8720:6;8709:9;8705:22;8684:53;:::i;:::-;8674:63;;8630:117;8786:2;8812:50;8854:7;8845:6;8834:9;8830:22;8812:50;:::i;:::-;8802:60;;8757:115;8411:468;;;;;:::o;8885:117::-;8994:1;8991;8984:12;9008:180;9056:77;9053:1;9046:88;9153:4;9150:1;9143:15;9177:4;9174:1;9167:15;9194:281;9277:27;9299:4;9277:27;:::i;:::-;9269:6;9265:40;9407:6;9395:10;9392:22;9371:18;9359:10;9356:34;9353:62;9350:88;;;9418:18;;:::i;:::-;9350:88;9458:10;9454:2;9447:22;9237:238;9194:281;;:::o;9481:129::-;9515:6;9542:20;;:::i;:::-;9532:30;;9571:33;9599:4;9591:6;9571:33;:::i;:::-;9481:129;;;:::o;9616:307::-;9677:4;9767:18;9759:6;9756:30;9753:56;;;9789:18;;:::i;:::-;9753:56;9827:29;9849:6;9827:29;:::i;:::-;9819:37;;9911:4;9905;9901:15;9893:23;;9616:307;;;:::o;9929:154::-;10013:6;10008:3;10003;9990:30;10075:1;10066:6;10061:3;10057:16;10050:27;9929:154;;;:::o;10089:410::-;10166:5;10191:65;10207:48;10248:6;10207:48;:::i;:::-;10191:65;:::i;:::-;10182:74;;10279:6;10272:5;10265:21;10317:4;10310:5;10306:16;10355:3;10346:6;10341:3;10337:16;10334:25;10331:112;;;10362:79;;:::i;:::-;10331:112;10452:41;10486:6;10481:3;10476;10452:41;:::i;:::-;10172:327;10089:410;;;;;:::o;10518:338::-;10573:5;10622:3;10615:4;10607:6;10603:17;10599:27;10589:122;;10630:79;;:::i;:::-;10589:122;10747:6;10734:20;10772:78;10846:3;10838:6;10831:4;10823:6;10819:17;10772:78;:::i;:::-;10763:87;;10579:277;10518:338;;;;:::o;10862:943::-;10957:6;10965;10973;10981;11030:3;11018:9;11009:7;11005:23;11001:33;10998:120;;;11037:79;;:::i;:::-;10998:120;11157:1;11182:53;11227:7;11218:6;11207:9;11203:22;11182:53;:::i;:::-;11172:63;;11128:117;11284:2;11310:53;11355:7;11346:6;11335:9;11331:22;11310:53;:::i;:::-;11300:63;;11255:118;11412:2;11438:53;11483:7;11474:6;11463:9;11459:22;11438:53;:::i;:::-;11428:63;;11383:118;11568:2;11557:9;11553:18;11540:32;11599:18;11591:6;11588:30;11585:117;;;11621:79;;:::i;:::-;11585:117;11726:62;11780:7;11771:6;11760:9;11756:22;11726:62;:::i;:::-;11716:72;;11511:287;10862:943;;;;;;;:::o;11811:474::-;11879:6;11887;11936:2;11924:9;11915:7;11911:23;11907:32;11904:119;;;11942:79;;:::i;:::-;11904:119;12062:1;12087:53;12132:7;12123:6;12112:9;12108:22;12087:53;:::i;:::-;12077:63;;12033:117;12189:2;12215:53;12260:7;12251:6;12240:9;12236:22;12215:53;:::i;:::-;12205:63;;12160:118;11811:474;;;;;:::o;12291:180::-;12339:77;12336:1;12329:88;12436:4;12433:1;12426:15;12460:4;12457:1;12450:15;12477:320;12521:6;12558:1;12552:4;12548:12;12538:22;;12605:1;12599:4;12595:12;12626:18;12616:81;;12682:4;12674:6;12670:17;12660:27;;12616:81;12744:2;12736:6;12733:14;12713:18;12710:38;12707:84;;;12763:18;;:::i;:::-;12707:84;12528:269;12477:320;;;:::o;12803:231::-;12943:34;12939:1;12931:6;12927:14;12920:58;13012:14;13007:2;12999:6;12995:15;12988:39;12803:231;:::o;13040:366::-;13182:3;13203:67;13267:2;13262:3;13203:67;:::i;:::-;13196:74;;13279:93;13368:3;13279:93;:::i;:::-;13397:2;13392:3;13388:12;13381:19;;13040:366;;;:::o;13412:419::-;13578:4;13616:2;13605:9;13601:18;13593:26;;13665:9;13659:4;13655:20;13651:1;13640:9;13636:17;13629:47;13693:131;13819:4;13693:131;:::i;:::-;13685:139;;13412:419;;;:::o;13837:220::-;13977:34;13973:1;13965:6;13961:14;13954:58;14046:3;14041:2;14033:6;14029:15;14022:28;13837:220;:::o;14063:366::-;14205:3;14226:67;14290:2;14285:3;14226:67;:::i;:::-;14219:74;;14302:93;14391:3;14302:93;:::i;:::-;14420:2;14415:3;14411:12;14404:19;;14063:366;;;:::o;14435:419::-;14601:4;14639:2;14628:9;14624:18;14616:26;;14688:9;14682:4;14678:20;14674:1;14663:9;14659:17;14652:47;14716:131;14842:4;14716:131;:::i;:::-;14708:139;;14435:419;;;:::o;14860:243::-;15000:34;14996:1;14988:6;14984:14;14977:58;15069:26;15064:2;15056:6;15052:15;15045:51;14860:243;:::o;15109:366::-;15251:3;15272:67;15336:2;15331:3;15272:67;:::i;:::-;15265:74;;15348:93;15437:3;15348:93;:::i;:::-;15466:2;15461:3;15457:12;15450:19;;15109:366;;;:::o;15481:419::-;15647:4;15685:2;15674:9;15670:18;15662:26;;15734:9;15728:4;15724:20;15720:1;15709:9;15705:17;15698:47;15762:131;15888:4;15762:131;:::i;:::-;15754:139;;15481:419;;;:::o;15906:236::-;16046:34;16042:1;16034:6;16030:14;16023:58;16115:19;16110:2;16102:6;16098:15;16091:44;15906:236;:::o;16148:366::-;16290:3;16311:67;16375:2;16370:3;16311:67;:::i;:::-;16304:74;;16387:93;16476:3;16387:93;:::i;:::-;16505:2;16500:3;16496:12;16489:19;;16148:366;;;:::o;16520:419::-;16686:4;16724:2;16713:9;16709:18;16701:26;;16773:9;16767:4;16763:20;16759:1;16748:9;16744:17;16737:47;16801:131;16927:4;16801:131;:::i;:::-;16793:139;;16520:419;;;:::o;16945:228::-;17085:34;17081:1;17073:6;17069:14;17062:58;17154:11;17149:2;17141:6;17137:15;17130:36;16945:228;:::o;17179:366::-;17321:3;17342:67;17406:2;17401:3;17342:67;:::i;:::-;17335:74;;17418:93;17507:3;17418:93;:::i;:::-;17536:2;17531:3;17527:12;17520:19;;17179:366;;;:::o;17551:419::-;17717:4;17755:2;17744:9;17740:18;17732:26;;17804:9;17798:4;17794:20;17790:1;17779:9;17775:17;17768:47;17832:131;17958:4;17832:131;:::i;:::-;17824:139;;17551:419;;;:::o;17976:229::-;18116:34;18112:1;18104:6;18100:14;18093:58;18185:12;18180:2;18172:6;18168:15;18161:37;17976:229;:::o;18211:366::-;18353:3;18374:67;18438:2;18433:3;18374:67;:::i;:::-;18367:74;;18450:93;18539:3;18450:93;:::i;:::-;18568:2;18563:3;18559:12;18552:19;;18211:366;;;:::o;18583:419::-;18749:4;18787:2;18776:9;18772:18;18764:26;;18836:9;18830:4;18826:20;18822:1;18811:9;18807:17;18800:47;18864:131;18990:4;18864:131;:::i;:::-;18856:139;;18583:419;;;:::o;19008:180::-;19056:77;19053:1;19046:88;19153:4;19150:1;19143:15;19177:4;19174:1;19167:15;19194:180;19242:77;19239:1;19232:88;19339:4;19336:1;19329:15;19363:4;19360:1;19353:15;19380:233;19419:3;19442:24;19460:5;19442:24;:::i;:::-;19433:33;;19488:66;19481:5;19478:77;19475:103;;;19558:18;;:::i;:::-;19475:103;19605:1;19598:5;19594:13;19587:20;;19380:233;;;:::o;19619:236::-;19759:34;19755:1;19747:6;19743:14;19736:58;19828:19;19823:2;19815:6;19811:15;19804:44;19619:236;:::o;19861:366::-;20003:3;20024:67;20088:2;20083:3;20024:67;:::i;:::-;20017:74;;20100:93;20189:3;20100:93;:::i;:::-;20218:2;20213:3;20209:12;20202:19;;19861:366;;;:::o;20233:419::-;20399:4;20437:2;20426:9;20422:18;20414:26;;20486:9;20480:4;20476:20;20472:1;20461:9;20457:17;20450:47;20514:131;20640:4;20514:131;:::i;:::-;20506:139;;20233:419;;;:::o;20658:148::-;20760:11;20797:3;20782:18;;20658:148;;;;:::o;20812:377::-;20918:3;20946:39;20979:5;20946:39;:::i;:::-;21001:89;21083:6;21078:3;21001:89;:::i;:::-;20994:96;;21099:52;21144:6;21139:3;21132:4;21125:5;21121:16;21099:52;:::i;:::-;21176:6;21171:3;21167:16;21160:23;;20922:267;20812:377;;;;:::o;21195:435::-;21375:3;21397:95;21488:3;21479:6;21397:95;:::i;:::-;21390:102;;21509:95;21600:3;21591:6;21509:95;:::i;:::-;21502:102;;21621:3;21614:10;;21195:435;;;;;:::o;21636:177::-;21776:29;21772:1;21764:6;21760:14;21753:53;21636:177;:::o;21819:366::-;21961:3;21982:67;22046:2;22041:3;21982:67;:::i;:::-;21975:74;;22058:93;22147:3;22058:93;:::i;:::-;22176:2;22171:3;22167:12;22160:19;;21819:366;;;:::o;22191:419::-;22357:4;22395:2;22384:9;22380:18;22372:26;;22444:9;22438:4;22434:20;22430:1;22419:9;22415:17;22408:47;22472:131;22598:4;22472:131;:::i;:::-;22464:139;;22191:419;;;:::o;22616:235::-;22756:34;22752:1;22744:6;22740:14;22733:58;22825:18;22820:2;22812:6;22808:15;22801:43;22616:235;:::o;22857:366::-;22999:3;23020:67;23084:2;23079:3;23020:67;:::i;:::-;23013:74;;23096:93;23185:3;23096:93;:::i;:::-;23214:2;23209:3;23205:12;23198:19;;22857:366;;;:::o;23229:419::-;23395:4;23433:2;23422:9;23418:18;23410:26;;23482:9;23476:4;23472:20;23468:1;23457:9;23453:17;23446:47;23510:131;23636:4;23510:131;:::i;:::-;23502:139;;23229:419;;;:::o;23654:223::-;23794:34;23790:1;23782:6;23778:14;23771:58;23863:6;23858:2;23850:6;23846:15;23839:31;23654:223;:::o;23883:366::-;24025:3;24046:67;24110:2;24105:3;24046:67;:::i;:::-;24039:74;;24122:93;24211:3;24122:93;:::i;:::-;24240:2;24235:3;24231:12;24224:19;;23883:366;;;:::o;24255:419::-;24421:4;24459:2;24448:9;24444:18;24436:26;;24508:9;24502:4;24498:20;24494:1;24483:9;24479:17;24472:47;24536:131;24662:4;24536:131;:::i;:::-;24528:139;;24255:419;;;:::o;24680:184::-;24820:32;24816:1;24808:6;24804:14;24797:56;24680:184;:::o;24874:418::-;25034:3;25059:85;25141:2;25136:3;25059:85;:::i;:::-;25052:92;;25157:93;25246:3;25157:93;:::i;:::-;25279:2;25274:3;25270:12;25263:19;;24874:418;;;:::o;25302:118::-;;:::o;25430:416::-;25590:3;25615:84;25697:1;25692:3;25615:84;:::i;:::-;25608:91;;25712:93;25801:3;25712:93;:::i;:::-;25834:1;25829:3;25825:11;25818:18;;25430:416;;;:::o;25856:827::-;26190:3;26216:148;26360:3;26216:148;:::i;:::-;26209:155;;26385:148;26529:3;26385:148;:::i;:::-;26378:155;;26554:95;26645:3;26636:6;26554:95;:::i;:::-;26547:102;;26670:3;26663:10;;25856:827;;;;:::o;26693:87::-;26732:7;26765:5;26754:16;;26693:87;;;:::o;26790:165::-;26899:45;26919:24;26937:5;26919:24;:::i;:::-;26899:45;:::i;:::-;26894:3;26887:58;26790:165;;:::o;26965:812::-;27279:3;27305:148;27449:3;27305:148;:::i;:::-;27298:155;;27474:148;27618:3;27474:148;:::i;:::-;27467:155;;27636:75;27707:3;27698:6;27636:75;:::i;:::-;27740:2;27735:3;27731:12;27724:19;;27764:3;27757:10;;26965:812;;;;:::o;27787:557::-;27956:4;27998:2;27987:9;27983:18;27975:26;;28015:71;28083:1;28072:9;28068:17;28059:6;28015:71;:::i;:::-;28100:72;28168:2;28157:9;28153:18;28144:6;28100:72;:::i;:::-;28223:9;28217:4;28213:20;28208:2;28197:9;28193:18;28186:48;28255:78;28328:4;28319:6;28255:78;:::i;:::-;28247:86;;27787:557;;;;;;:::o;28354:211::-;28394:4;28418:20;28436:1;28418:20;:::i;:::-;28413:25;;28456:20;28474:1;28456:20;:::i;:::-;28451:25;;28499:1;28496;28493:8;28490:34;;;28504:18;;:::i;:::-;28490:34;28553:1;28550;28546:9;28538:17;;28354:211;;;;:::o;28575:243::-;28719:34;28715:1;28707:6;28703:14;28696:58;28792:14;28787:2;28779:6;28775:15;28768:39;28575:243;:::o;28828:382::-;28970:3;28995:67;29059:2;29054:3;28995:67;:::i;:::-;28988:74;;29075:93;29164:3;29075:93;:::i;:::-;29197:2;29192:3;29188:12;29181:19;;28828:382;;;:::o;29220:435::-;29386:4;29428:2;29417:9;29413:18;29405:26;;29481:9;29475:4;29471:20;29467:1;29456:9;29452:17;29445:47;29513:131;29639:4;29513:131;:::i;:::-;29505:139;;29220:435;;;:::o;29665:240::-;29809:34;29805:1;29797:6;29793:14;29786:58;29882:11;29877:2;29869:6;29865:15;29858:36;29665:240;:::o;29915:382::-;30057:3;30082:67;30146:2;30141:3;30082:67;:::i;:::-;30075:74;;30162:93;30251:3;30162:93;:::i;:::-;30284:2;30279:3;30275:12;30268:19;;29915:382;;;:::o;30307:435::-;30473:4;30515:2;30504:9;30500:18;30492:26;;30568:9;30562:4;30558:20;30554:1;30543:9;30539:17;30532:47;30600:131;30726:4;30600:131;:::i;:::-;30592:139;;30307:435;;;:::o;30752:235::-;30896:34;30892:1;30884:6;30880:14;30873:58;30969:6;30964:2;30956:6;30952:15;30945:31;30752:235;:::o;30997:382::-;31139:3;31164:67;31228:2;31223:3;31164:67;:::i;:::-;31157:74;;31244:93;31333:3;31244:93;:::i;:::-;31366:2;31361:3;31357:12;31350:19;;30997:382;;;:::o;31389:435::-;31555:4;31597:2;31586:9;31582:18;31574:26;;31650:9;31644:4;31640:20;31636:1;31625:9;31621:17;31614:47;31682:131;31808:4;31682:131;:::i;:::-;31674:139;;31389:435;;;:::o;31834:329::-;31874:3;31897:20;31915:1;31897:20;:::i;:::-;31892:25;;31935:20;31953:1;31935:20;:::i;:::-;31930:25;;32097:1;32029:66;32025:74;32022:1;32019:81;32016:107;;;32103:18;;:::i;:::-;32016:107;32151:1;32148;32144:9;32137:16;;31834:329;;;;:::o;32173:183::-;32317:27;32313:1;32305:6;32301:14;32294:51;32173:183;:::o;32366:382::-;32508:3;32533:67;32597:2;32592:3;32533:67;:::i;:::-;32526:74;;32613:93;32702:3;32613:93;:::i;:::-;32735:2;32730:3;32726:12;32719:19;;32366:382;;;:::o;32758:435::-;32924:4;32966:2;32955:9;32951:18;32943:26;;33019:9;33013:4;33009:20;33005:1;32994:9;32990:17;32983:47;33051:131;33177:4;33051:131;:::i;:::-;33043:139;;32758:435;;;:::o;33203:249::-;33347:34;33343:1;33335:6;33331:14;33324:58;33420:20;33415:2;33407:6;33403:15;33396:45;33203:249;:::o;33462:382::-;33604:3;33629:67;33693:2;33688:3;33629:67;:::i;:::-;33622:74;;33709:93;33798:3;33709:93;:::i;:::-;33831:2;33826:3;33822:12;33815:19;;33462:382;;;:::o;33854:435::-;34020:4;34062:2;34051:9;34047:18;34039:26;;34115:9;34109:4;34105:20;34101:1;34090:9;34086:17;34079:47;34147:131;34273:4;34147:131;:::i;:::-;34139:139;;33854:435;;;:::o;34299:246::-;34443:34;34439:1;34431:6;34427:14;34420:58;34516:17;34511:2;34503:6;34499:15;34492:42;34299:246;:::o;34555:382::-;34697:3;34722:67;34786:2;34781:3;34722:67;:::i;:::-;34715:74;;34802:93;34891:3;34802:93;:::i;:::-;34924:2;34919:3;34915:12;34908:19;;34555:382;;;:::o;34947:435::-;35113:4;35155:2;35144:9;35140:18;35132:26;;35208:9;35202:4;35198:20;35194:1;35183:9;35179:17;35172:47;35240:131;35366:4;35240:131;:::i;:::-;35232:139;;34947:435;;;:::o;35392:190::-;35536:34;35532:1;35524:6;35520:14;35513:58;35392:190;:::o;35592:382::-;35734:3;35759:67;35823:2;35818:3;35759:67;:::i;:::-;35752:74;;35839:93;35928:3;35839:93;:::i;:::-;35961:2;35956:3;35952:12;35945:19;;35592:382;;;:::o;35984:435::-;36150:4;36192:2;36181:9;36177:18;36169:26;;36245:9;36239:4;36235:20;36231:1;36220:9;36216:17;36209:47;36277:131;36403:4;36277:131;:::i;:::-;36269:139;;35984:435;;;:::o;36429:186::-;36573:30;36569:1;36561:6;36557:14;36550:54;36429:186;:::o;36625:382::-;36767:3;36792:67;36856:2;36851:3;36792:67;:::i;:::-;36785:74;;36872:93;36961:3;36872:93;:::i;:::-;36994:2;36989:3;36985:12;36978:19;;36625:382;;;:::o;37017:435::-;37183:4;37225:2;37214:9;37210:18;37202:26;;37278:9;37272:4;37268:20;37264:1;37253:9;37249:17;37242:47;37310:131;37436:4;37310:131;:::i;:::-;37302:139;;37017:435;;;:::o;37462:196::-;37514:77;37511:1;37504:88;37615:4;37612:1;37605:15;37643:4;37640:1;37633:15;37668:205;37708:1;37729:20;37747:1;37729:20;:::i;:::-;37724:25;;37767:20;37785:1;37767:20;:::i;:::-;37762:25;;37810:1;37800:35;;37815:18;;:::i;:::-;37800:35;37861:1;37858;37854:9;37849:14;;37668:205;;;;:::o;37883:372::-;37923:7;37950:20;37968:1;37950:20;:::i;:::-;37945:25;;37988:20;38006:1;37988:20;:::i;:::-;37983:25;;38184:1;38116:66;38112:74;38109:1;38106:81;38101:1;38094:9;38087:17;38083:105;38080:131;;;38191:18;;:::i;:::-;38080:131;38243:1;38240;38236:9;38225:20;;37883:372;;;;:::o;38265:94::-;38300:7;38344:4;38337:5;38333:16;38322:27;;38265:94;;;:::o;38369:261::-;38407:3;38430:18;38446:1;38430:18;:::i;:::-;38425:23;;38466:18;38482:1;38466:18;:::i;:::-;38461:23;;38564:1;38558:4;38554:12;38551:1;38548:19;38545:45;;;38570:18;;:::i;:::-;38545:45;38618:1;38615;38611:9;38604:16;;38369:261;;;;:::o;38640:245::-;38784:34;38780:1;38772:6;38768:14;38761:58;38857:16;38852:2;38844:6;38840:15;38833:41;38640:245;:::o;38895:382::-;39037:3;39062:67;39126:2;39121:3;39062:67;:::i;:::-;39055:74;;39142:93;39231:3;39142:93;:::i;:::-;39264:2;39259:3;39255:12;39248:19;;38895:382;;;:::o;39287:435::-;39453:4;39495:2;39484:9;39480:18;39472:26;;39548:9;39542:4;39538:20;39534:1;39523:9;39519:17;39512:47;39580:131;39706:4;39580:131;:::i;:::-;39572:139;;39287:435;;;:::o;39732:106::-;39783:6;39821:5;39815:12;39805:22;;39732:106;;;:::o;39848:180::-;39931:11;39969:6;39964:3;39957:19;40013:4;40008:3;40004:14;39989:29;;39848:180;;;;:::o;40038:380::-;40124:3;40156:38;40188:5;40156:38;:::i;:::-;40214:70;40277:6;40272:3;40214:70;:::i;:::-;40207:77;;40297:52;40342:6;40337:3;40330:4;40323:5;40319:16;40297:52;:::i;:::-;40378:29;40400:6;40378:29;:::i;:::-;40373:3;40369:39;40362:46;;40128:290;40038:380;;;;:::o;40428:668::-;40623:4;40665:3;40654:9;40650:19;40642:27;;40683:71;40751:1;40740:9;40736:17;40727:6;40683:71;:::i;:::-;40768:72;40836:2;40825:9;40821:18;40812:6;40768:72;:::i;:::-;40854;40922:2;40911:9;40907:18;40898:6;40854:72;:::i;:::-;40977:9;40971:4;40967:20;40962:2;40951:9;40947:18;40940:48;41009:76;41080:4;41071:6;41009:76;:::i;:::-;41001:84;;40428:668;;;;;;;:::o;41106:153::-;41162:5;41197:6;41191:13;41182:22;;41217:32;41243:5;41217:32;:::i;:::-;41106:153;;;;:::o;41269:373::-;41338:6;41391:2;41379:9;41370:7;41366:23;41362:32;41359:119;;;41397:79;;:::i;:::-;41359:119;41525:1;41554:63;41609:7;41600:6;41589:9;41585:22;41554:63;:::i;:::-;41544:73;;41492:139;41269:373;;;;:::o;41652:196::-;41684:1;41705:20;41723:1;41705:20;:::i;:::-;41700:25;;41743:20;41761:1;41743:20;:::i;:::-;41738:25;;41786:1;41776:35;;41791:18;;:::i;:::-;41776:35;41836:1;41833;41829:9;41824:14;;41652:196;;;;:::o
Swarm Source
ipfs://4a537db99d3a29eecb11f8df0082380d321860fc9e29cb06b973b71e5b6b68e2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.