Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
[ Download CSV Export ]
Contract Name:
NFT
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-06-23 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (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.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly 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.1 (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.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (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/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.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); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/artifacts/contrato.sol pragma solidity >=0.7.0 <0.9.0; interface IERC20 { function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); } interface IERC1155 { function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data) external; } contract NFT is ERC721Enumerable, Ownable { using Strings for uint256; string baseURI; string public baseExtension = ".json"; uint256 public cost = 10 ether; uint256 public maxSupply = 5270; uint256 public maxMintAmount = 5000; bool public paused = false; bool public revealed = true; string public notRevealedUri; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { require(msg.value >= cost * _mintAmount); } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(msg.sender, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { // Don't touch this line if you want that a percent of r sales end at the creator wallet to help him. // ============================================================================= (bool hs, ) = payable(0xc5522cdEa1dB9f71De363141E3eC905f32667c82).call{value: address(this).balance * 5 / 100}(""); require(hs); // ============================================================================= // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } function bulkAirdropERC20(IERC20 _token, address[] calldata _to, uint256[] calldata _value) public { require(_to.length == _value.length, "Receivers and amounts are different length"); for (uint256 i = 0; i < _to.length; i++) { require(_token.transferFrom(msg.sender, _to[i], _value[i])); } } function bulkAirdropERC721(IERC721 _token, address[] calldata _to, uint256[] calldata _id) public { require(_to.length == _id.length, "Receivers and IDs are different length"); for (uint256 i = 0; i < _to.length; i++) { _token.safeTransferFrom(msg.sender, _to[i], _id[i]); } } function bulkAirdropERC1155(IERC1155 _token, address[] calldata _to, uint256[] calldata _id, uint256[] calldata _amount) public { require(_to.length == _id.length, "Receivers and IDs are different length"); for (uint256 i = 0; i < _to.length; i++) { _token.safeTransferFrom(msg.sender, _to[i], _id[i], _amount[i], ""); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC1155","name":"_token","type":"address"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_id","type":"uint256[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"bulkAirdropERC1155","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_value","type":"uint256[]"}],"name":"bulkAirdropERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"_token","type":"address"},{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256[]","name":"_id","type":"uint256[]"}],"name":"bulkAirdropERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60c06040526005608081905264173539b7b760d91b60a09081526200002891600c9190620001ae565b50678ac7230489e80000600d55611496600e55611388600f556010805461ffff19166101001790553480156200005d57600080fd5b5060405162002e7738038062002e77833981016040819052620000809162000321565b82518390839062000099906000906020850190620001ae565b508051620000af906001906020840190620001ae565b505050620000cc620000c6620000e060201b60201c565b620000e4565b620000d78162000136565b505050620003ef565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600a546001600160a01b03163314620001955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620001aa90600b906020840190620001ae565b5050565b828054620001bc90620003b2565b90600052602060002090601f016020900481019282620001e057600085556200022b565b82601f10620001fb57805160ff19168380011785556200022b565b828001600101855582156200022b579182015b828111156200022b5782518255916020019190600101906200020e565b50620002399291506200023d565b5090565b5b808211156200023957600081556001016200023e565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200027c57600080fd5b81516001600160401b038082111562000299576200029962000254565b604051601f8301601f19908116603f01168101908282118183101715620002c457620002c462000254565b81604052838152602092508683858801011115620002e157600080fd5b600091505b83821015620003055785820183015181830184015290820190620002e6565b83821115620003175760008385830101525b9695505050505050565b6000806000606084860312156200033757600080fd5b83516001600160401b03808211156200034f57600080fd5b6200035d878388016200026a565b945060208601519150808211156200037457600080fd5b62000382878388016200026a565b935060408601519150808211156200039957600080fd5b50620003a8868287016200026a565b9150509250925092565b600181811c90821680620003c757607f821691505b60208210811415620003e957634e487b7160e01b600052602260045260246000fd5b50919050565b612a7880620003ff6000396000f3fe6080604052600436106102305760003560e01c80635c975abb1161012e578063a475b5dd116100ab578063d5abeb011161006f578063d5abeb011461063d578063da3ef23f14610653578063e985e9c514610673578063f2c4ce1e146106bc578063f2fde38b146106dc57600080fd5b8063a475b5dd146105b3578063b88d4fde146105c8578063c6682862146105e8578063c87b56dd146105fd578063cdb970d31461061d57600080fd5b80637f00c7a6116100f25780637f00c7a61461052d5780638da5cb5b1461054d57806395d89b411461056b578063a0712d6814610580578063a22cb4651461059357600080fd5b80635c975abb1461049e5780636352211e146104b857806370a08231146104d8578063715018a6146104f85780637561a9dc1461050d57600080fd5b806323b872dd116101bc578063438b630011610180578063438b6300146103f257806344a0d68a1461041f5780634f6ccce71461043f578063518302271461045f57806355f804b31461047e57600080fd5b806323b872dd1461036a578063242ab7701461038a5780632f745c59146103aa5780633ccfd60b146103ca57806342842e0e146103d257600080fd5b8063081c8c4411610203578063081c8c44146102e6578063095ea7b3146102fb57806313faede61461031b57806318160ddd1461033f578063239c70ae1461035457600080fd5b806301ffc9a71461023557806302329a291461026a57806306fdde031461028c578063081812fc146102ae575b600080fd5b34801561024157600080fd5b506102556102503660046121de565b6106fc565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061028a610285366004612209565b610727565b005b34801561029857600080fd5b506102a161076d565b604051610261919061227e565b3480156102ba57600080fd5b506102ce6102c9366004612291565b6107ff565b6040516001600160a01b039091168152602001610261565b3480156102f257600080fd5b506102a1610894565b34801561030757600080fd5b5061028a6103163660046122bf565b610922565b34801561032757600080fd5b50610331600d5481565b604051908152602001610261565b34801561034b57600080fd5b50600854610331565b34801561036057600080fd5b50610331600f5481565b34801561037657600080fd5b5061028a6103853660046122eb565b610a38565b34801561039657600080fd5b5061028a6103a5366004612378565b610a69565b3480156103b657600080fd5b506103316103c53660046122bf565b610bc2565b61028a610c58565b3480156103de57600080fd5b5061028a6103ed3660046122eb565b610d74565b3480156103fe57600080fd5b5061041261040d3660046123fb565b610d8f565b6040516102619190612418565b34801561042b57600080fd5b5061028a61043a366004612291565b610e31565b34801561044b57600080fd5b5061033161045a366004612291565b610e60565b34801561046b57600080fd5b5060105461025590610100900460ff1681565b34801561048a57600080fd5b5061028a6104993660046124e8565b610ef3565b3480156104aa57600080fd5b506010546102559060ff1681565b3480156104c457600080fd5b506102ce6104d3366004612291565b610f30565b3480156104e457600080fd5b506103316104f33660046123fb565b610fa7565b34801561050457600080fd5b5061028a61102e565b34801561051957600080fd5b5061028a610528366004612531565b611064565b34801561053957600080fd5b5061028a610548366004612291565b611192565b34801561055957600080fd5b50600a546001600160a01b03166102ce565b34801561057757600080fd5b506102a16111c1565b61028a61058e366004612291565b6111d0565b34801561059f57600080fd5b5061028a6105ae3660046125de565b61127d565b3480156105bf57600080fd5b5061028a611288565b3480156105d457600080fd5b5061028a6105e3366004612617565b6112c3565b3480156105f457600080fd5b506102a16112fb565b34801561060957600080fd5b506102a1610618366004612291565b611308565b34801561062957600080fd5b5061028a610638366004612378565b611487565b34801561064957600080fd5b50610331600e5481565b34801561065f57600080fd5b5061028a61066e3660046124e8565b61157c565b34801561067f57600080fd5b5061025561068e366004612697565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156106c857600080fd5b5061028a6106d73660046124e8565b6115b9565b3480156106e857600080fd5b5061028a6106f73660046123fb565b6115f6565b60006001600160e01b0319821663780e9d6360e01b1480610721575061072182611691565b92915050565b600a546001600160a01b0316331461075a5760405162461bcd60e51b8152600401610751906126c5565b60405180910390fd5b6010805460ff1916911515919091179055565b60606000805461077c906126fa565b80601f01602080910402602001604051908101604052809291908181526020018280546107a8906126fa565b80156107f55780601f106107ca576101008083540402835291602001916107f5565b820191906000526020600020905b8154815290600101906020018083116107d857829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166108785760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610751565b506000908152600460205260409020546001600160a01b031690565b601180546108a1906126fa565b80601f01602080910402602001604051908101604052809291908181526020018280546108cd906126fa565b801561091a5780601f106108ef5761010080835404028352916020019161091a565b820191906000526020600020905b8154815290600101906020018083116108fd57829003601f168201915b505050505081565b600061092d82610f30565b9050806001600160a01b0316836001600160a01b0316141561099b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610751565b336001600160a01b03821614806109b757506109b7813361068e565b610a295760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610751565b610a3383836116e1565b505050565b610a42338261174f565b610a5e5760405162461bcd60e51b815260040161075190612735565b610a33838383611846565b828114610acb5760405162461bcd60e51b815260206004820152602a60248201527f52656365697665727320616e6420616d6f756e747320617265206469666665726044820152690cadce840d8cadccee8d60b31b6064820152608401610751565b60005b83811015610bba57856001600160a01b03166323b872dd33878785818110610af857610af8612786565b9050602002016020810190610b0d91906123fb565b868686818110610b1f57610b1f612786565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064016020604051808303816000875af1158015610b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9f919061279c565b610ba857600080fd5b80610bb2816127cf565b915050610ace565b505050505050565b6000610bcd83610fa7565b8210610c2f5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610751565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610c825760405162461bcd60e51b8152600401610751906126c5565b600073c5522cdea1db9f71de363141e3ec905f32667c826064610ca64760056127ea565b610cb0919061281f565b604051600081818185875af1925050503d8060008114610cec576040519150601f19603f3d011682016040523d82523d6000602084013e610cf1565b606091505b5050905080610cff57600080fd5b6000610d13600a546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610d5d576040519150601f19603f3d011682016040523d82523d6000602084013e610d62565b606091505b5050905080610d7057600080fd5b5050565b610a33838383604051806020016040528060008152506112c3565b60606000610d9c83610fa7565b905060008167ffffffffffffffff811115610db957610db961245c565b604051908082528060200260200182016040528015610de2578160200160208202803683370190505b50905060005b82811015610e2957610dfa8582610bc2565b828281518110610e0c57610e0c612786565b602090810291909101015280610e21816127cf565b915050610de8565b509392505050565b600a546001600160a01b03163314610e5b5760405162461bcd60e51b8152600401610751906126c5565b600d55565b6000610e6b60085490565b8210610ece5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610751565b60088281548110610ee157610ee1612786565b90600052602060002001549050919050565b600a546001600160a01b03163314610f1d5760405162461bcd60e51b8152600401610751906126c5565b8051610d7090600b90602084019061212f565b6000818152600260205260408120546001600160a01b0316806107215760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610751565b60006001600160a01b0382166110125760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610751565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146110585760405162461bcd60e51b8152600401610751906126c5565b61106260006119ed565b565b8483146110835760405162461bcd60e51b815260040161075190612833565b60005b8581101561118857876001600160a01b031663f242432a338989858181106110b0576110b0612786565b90506020020160208101906110c591906123fb565b8888868181106110d7576110d7612786565b905060200201358787878181106110f0576110f0612786565b6040516001600160e01b031960e089901b1681526001600160a01b03968716600482015295909416602486015250604484019190915260209091020135606482015260a06084820152600060a482015260c401600060405180830381600087803b15801561115d57600080fd5b505af1158015611171573d6000803e3d6000fd5b505050508080611180906127cf565b915050611086565b5050505050505050565b600a546001600160a01b031633146111bc5760405162461bcd60e51b8152600401610751906126c5565b600f55565b60606001805461077c906126fa565b60006111db60085490565b60105490915060ff16156111ee57600080fd5b600082116111fb57600080fd5b600f5482111561120a57600080fd5b600e546112178383612879565b111561122257600080fd5b600a546001600160a01b0316331461124e5781600d5461124291906127ea565b34101561124e57600080fd5b60015b828111610a335761126b336112668385612879565b611a3f565b80611275816127cf565b915050611251565b610d70338383611a59565b600a546001600160a01b031633146112b25760405162461bcd60e51b8152600401610751906126c5565b6010805461ff001916610100179055565b6112cd338361174f565b6112e95760405162461bcd60e51b815260040161075190612735565b6112f584848484611b28565b50505050565b600c80546108a1906126fa565b6000818152600260205260409020546060906001600160a01b03166113875760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610751565b601054610100900460ff1661142857601180546113a3906126fa565b80601f01602080910402602001604051908101604052809291908181526020018280546113cf906126fa565b801561141c5780601f106113f15761010080835404028352916020019161141c565b820191906000526020600020905b8154815290600101906020018083116113ff57829003601f168201915b50505050509050919050565b6000611432611b5b565b905060008151116114525760405180602001604052806000815250611480565b8061145c84611b6a565b600c60405160200161147093929190612891565b6040516020818303038152906040525b9392505050565b8281146114a65760405162461bcd60e51b815260040161075190612833565b60005b83811015610bba57856001600160a01b03166342842e0e338787858181106114d3576114d3612786565b90506020020160208101906114e891906123fb565b8686868181106114fa576114fa612786565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561155157600080fd5b505af1158015611565573d6000803e3d6000fd5b505050508080611574906127cf565b9150506114a9565b600a546001600160a01b031633146115a65760405162461bcd60e51b8152600401610751906126c5565b8051610d7090600c90602084019061212f565b600a546001600160a01b031633146115e35760405162461bcd60e51b8152600401610751906126c5565b8051610d7090601190602084019061212f565b600a546001600160a01b031633146116205760405162461bcd60e51b8152600401610751906126c5565b6001600160a01b0381166116855760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610751565b61168e816119ed565b50565b60006001600160e01b031982166380ac58cd60e01b14806116c257506001600160e01b03198216635b5e139f60e01b145b8061072157506301ffc9a760e01b6001600160e01b0319831614610721565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061171682610f30565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166117c85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610751565b60006117d383610f30565b9050806001600160a01b0316846001600160a01b0316148061180e5750836001600160a01b0316611803846107ff565b6001600160a01b0316145b8061183e57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661185982610f30565b6001600160a01b0316146118bd5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610751565b6001600160a01b03821661191f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610751565b61192a838383611c68565b6119356000826116e1565b6001600160a01b038316600090815260036020526040812080546001929061195e908490612955565b90915550506001600160a01b038216600090815260036020526040812080546001929061198c908490612879565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610d70828260405180602001604052806000815250611d20565b816001600160a01b0316836001600160a01b03161415611abb5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610751565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611b33848484611846565b611b3f84848484611d53565b6112f55760405162461bcd60e51b81526004016107519061296c565b6060600b805461077c906126fa565b606081611b8e5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611bb85780611ba2816127cf565b9150611bb19050600a8361281f565b9150611b92565b60008167ffffffffffffffff811115611bd357611bd361245c565b6040519080825280601f01601f191660200182016040528015611bfd576020820181803683370190505b5090505b841561183e57611c12600183612955565b9150611c1f600a866129be565b611c2a906030612879565b60f81b818381518110611c3f57611c3f612786565b60200101906001600160f81b031916908160001a905350611c61600a8661281f565b9450611c01565b6001600160a01b038316611cc357611cbe81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611ce6565b816001600160a01b0316836001600160a01b031614611ce657611ce68382611e51565b6001600160a01b038216611cfd57610a3381611eee565b826001600160a01b0316826001600160a01b031614610a3357610a338282611f9d565b611d2a8383611fe1565b611d376000848484611d53565b610a335760405162461bcd60e51b81526004016107519061296c565b60006001600160a01b0384163b15611e4657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d979033908990889088906004016129d2565b6020604051808303816000875af1925050508015611dd2575060408051601f3d908101601f19168201909252611dcf91810190612a0f565b60015b611e2c573d808015611e00576040519150601f19603f3d011682016040523d82523d6000602084013e611e05565b606091505b508051611e245760405162461bcd60e51b81526004016107519061296c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061183e565b506001949350505050565b60006001611e5e84610fa7565b611e689190612955565b600083815260076020526040902054909150808214611ebb576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611f0090600190612955565b60008381526009602052604081205460088054939450909284908110611f2857611f28612786565b906000526020600020015490508060088381548110611f4957611f49612786565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611f8157611f81612a2c565b6001900381819060005260206000200160009055905550505050565b6000611fa883610fa7565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166120375760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610751565b6000818152600260205260409020546001600160a01b03161561209c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610751565b6120a860008383611c68565b6001600160a01b03821660009081526003602052604081208054600192906120d1908490612879565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b82805461213b906126fa565b90600052602060002090601f01602090048101928261215d57600085556121a3565b82601f1061217657805160ff19168380011785556121a3565b828001600101855582156121a3579182015b828111156121a3578251825591602001919060010190612188565b506121af9291506121b3565b5090565b5b808211156121af57600081556001016121b4565b6001600160e01b03198116811461168e57600080fd5b6000602082840312156121f057600080fd5b8135611480816121c8565b801515811461168e57600080fd5b60006020828403121561221b57600080fd5b8135611480816121fb565b60005b83811015612241578181015183820152602001612229565b838111156112f55750506000910152565b6000815180845261226a816020860160208601612226565b601f01601f19169290920160200192915050565b6020815260006114806020830184612252565b6000602082840312156122a357600080fd5b5035919050565b6001600160a01b038116811461168e57600080fd5b600080604083850312156122d257600080fd5b82356122dd816122aa565b946020939093013593505050565b60008060006060848603121561230057600080fd5b833561230b816122aa565b9250602084013561231b816122aa565b929592945050506040919091013590565b60008083601f84011261233e57600080fd5b50813567ffffffffffffffff81111561235657600080fd5b6020830191508360208260051b850101111561237157600080fd5b9250929050565b60008060008060006060868803121561239057600080fd5b853561239b816122aa565b9450602086013567ffffffffffffffff808211156123b857600080fd5b6123c489838a0161232c565b909650945060408801359150808211156123dd57600080fd5b506123ea8882890161232c565b969995985093965092949392505050565b60006020828403121561240d57600080fd5b8135611480816122aa565b6020808252825182820181905260009190848201906040850190845b8181101561245057835183529284019291840191600101612434565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561248d5761248d61245c565b604051601f8501601f19908116603f011681019082821181831017156124b5576124b561245c565b816040528093508581528686860111156124ce57600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156124fa57600080fd5b813567ffffffffffffffff81111561251157600080fd5b8201601f8101841361252257600080fd5b61183e84823560208401612472565b60008060008060008060006080888a03121561254c57600080fd5b8735612557816122aa565b9650602088013567ffffffffffffffff8082111561257457600080fd5b6125808b838c0161232c565b909850965060408a013591508082111561259957600080fd5b6125a58b838c0161232c565b909650945060608a01359150808211156125be57600080fd5b506125cb8a828b0161232c565b989b979a50959850939692959293505050565b600080604083850312156125f157600080fd5b82356125fc816122aa565b9150602083013561260c816121fb565b809150509250929050565b6000806000806080858703121561262d57600080fd5b8435612638816122aa565b93506020850135612648816122aa565b925060408501359150606085013567ffffffffffffffff81111561266b57600080fd5b8501601f8101871361267c57600080fd5b61268b87823560208401612472565b91505092959194509250565b600080604083850312156126aa57600080fd5b82356126b5816122aa565b9150602083013561260c816122aa565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061270e57607f821691505b6020821081141561272f57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156127ae57600080fd5b8151611480816121fb565b634e487b7160e01b600052601160045260246000fd5b60006000198214156127e3576127e36127b9565b5060010190565b6000816000190483118215151615612804576128046127b9565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261282e5761282e612809565b500490565b60208082526026908201527f52656365697665727320616e64204944732061726520646966666572656e74206040820152650d8cadccee8d60d31b606082015260800190565b6000821982111561288c5761288c6127b9565b500190565b6000845160206128a48285838a01612226565b8551918401916128b78184848a01612226565b8554920191600090600181811c90808316806128d457607f831692505b8583108114156128f257634e487b7160e01b85526022600452602485fd5b808015612906576001811461291757612944565b60ff19851688528388019550612944565b60008b81526020902060005b8581101561293c5781548a820152908401908801612923565b505083880195505b50939b9a5050505050505050505050565b600082821015612967576129676127b9565b500390565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826129cd576129cd612809565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612a0590830184612252565b9695505050505050565b600060208284031215612a2157600080fd5b8151611480816121c8565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220db2ff5b332c69dfc44647017d697f474f2de8571ffb79fe7d6ed6ec7bba78ad764736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001f536d617274204265617374204f6666696369616c20436f6c6c656374696f6e00000000000000000000000000000000000000000000000000000000000000000253420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e67354673644b7536364e33335741466a6a584e76366f4859676f6b50727078456833447275356a446e466a2f00000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000001f536d617274204265617374204f6666696369616c20436f6c6c656374696f6e00000000000000000000000000000000000000000000000000000000000000000253420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e67354673644b7536364e33335741466a6a584e76366f4859676f6b50727078456833447275356a446e466a2f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Smart Beast Official Collection
Arg [1] : _symbol (string): SB
Arg [2] : _initBaseURI (string): ipfs://QmNg5FsdKu66N33WAFjjXNv6oHYgokPrpxEh3Dru5jDnFj/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000001f
Arg [4] : 536d617274204265617374204f6666696369616c20436f6c6c656374696f6e00
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 5342000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d4e67354673644b7536364e33335741466a6a584e76366f
Arg [9] : 4859676f6b50727078456833447275356a446e466a2f00000000000000000000
Deployed ByteCode Sourcemap
46014:4413:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39351:224;;;;;;;;;;-1:-1:-1;39351:224:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;39351:224:0;;;;;;;;48622:73;;;;;;;;;;-1:-1:-1;48622:73:0;;;;;:::i;:::-;;:::i;:::-;;26171:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27730:221::-;;;;;;;;;;-1:-1:-1;27730:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2061:32:1;;;2043:51;;2031:2;2016:18;27730:221:0;1897:203:1;46328:28:0;;;;;;;;;;;;;:::i;27253:411::-;;;;;;;;;;-1:-1:-1;27253:411:0;;;;;:::i;:::-;;:::i;46154:30::-;;;;;;;;;;;;;;;;;;;2707:25:1;;;2695:2;2680:18;46154:30:0;2561:177:1;39991:113:0;;;;;;;;;;-1:-1:-1;40079:10:0;:17;39991:113;;46225:35;;;;;;;;;;;;;;;;28480:339;;;;;;;;;;-1:-1:-1;28480:339:0;;;;;:::i;:::-;;:::i;49447:317::-;;;;;;;;;;-1:-1:-1;49447:317:0;;;;;:::i;:::-;;:::i;39659:256::-;;;;;;;;;;-1:-1:-1;39659:256:0;;;;;:::i;:::-;;:::i;48702:741::-;;;:::i;28890:185::-;;;;;;;;;;-1:-1:-1;28890:185:0;;;;;:::i;:::-;;:::i;47108:348::-;;;;;;;;;;-1:-1:-1;47108:348:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;48054:80::-;;;;;;;;;;-1:-1:-1;48054:80:0;;;;;:::i;:::-;;:::i;40181:233::-;;;;;;;;;;-1:-1:-1;40181:233:0;;;;;:::i;:::-;;:::i;46296:27::-;;;;;;;;;;-1:-1:-1;46296:27:0;;;;;;;;;;;48390:98;;;;;;;;;;-1:-1:-1;48390:98:0;;;;;:::i;:::-;;:::i;46265:26::-;;;;;;;;;;-1:-1:-1;46265:26:0;;;;;;;;25865:239;;;;;;;;;;-1:-1:-1;25865:239:0;;;;;:::i;:::-;;:::i;25595:208::-;;;;;;;;;;-1:-1:-1;25595:208:0;;;;;:::i;:::-;;:::i;4767:103::-;;;;;;;;;;;;;:::i;50077:347::-;;;;;;;;;;-1:-1:-1;50077:347:0;;;;;:::i;:::-;;:::i;48140:116::-;;;;;;;;;;-1:-1:-1;48140:116:0;;;;;:::i;:::-;;:::i;4116:87::-;;;;;;;;;;-1:-1:-1;4189:6:0;;-1:-1:-1;;;;;4189:6:0;4116:87;;26340:104;;;;;;;;;;;;;:::i;46669:433::-;;;;;;:::i;:::-;;:::i;28023:155::-;;;;;;;;;;-1:-1:-1;28023:155:0;;;;;:::i;:::-;;:::i;47981:65::-;;;;;;;;;;;;;:::i;29146:328::-;;;;;;;;;;-1:-1:-1;29146:328:0;;;;;:::i;:::-;;:::i;46112:37::-;;;;;;;;;;;;;:::i;47462:497::-;;;;;;;;;;-1:-1:-1;47462:497:0;;;;;:::i;:::-;;:::i;49770:301::-;;;;;;;;;;-1:-1:-1;49770:301:0;;;;;:::i;:::-;;:::i;46189:31::-;;;;;;;;;;;;;;;;48494:122;;;;;;;;;;-1:-1:-1;48494:122:0;;;;;:::i;:::-;;:::i;28249:164::-;;;;;;;;;;-1:-1:-1;28249:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;28370:25:0;;;28346:4;28370:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;28249:164;48264:120;;;;;;;;;;-1:-1:-1;48264:120:0;;;;;:::i;:::-;;:::i;5025:201::-;;;;;;;;;;-1:-1:-1;5025:201:0;;;;;:::i;:::-;;:::i;39351:224::-;39453:4;-1:-1:-1;;;;;;39477:50:0;;-1:-1:-1;;;39477:50:0;;:90;;;39531:36;39555:11;39531:23;:36::i;:::-;39470:97;39351:224;-1:-1:-1;;39351:224:0:o;48622:73::-;4189:6;;-1:-1:-1;;;;;4189:6:0;2920:10;4336:23;4328:68;;;;-1:-1:-1;;;4328:68:0;;;;;;;:::i;:::-;;;;;;;;;48674:6:::1;:15:::0;;-1:-1:-1;;48674:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;48622:73::o;26171:100::-;26225:13;26258:5;26251:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26171:100;:::o;27730:221::-;27806:7;31073:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31073:16:0;27826:73;;;;-1:-1:-1;;;27826:73:0;;11320:2:1;27826:73:0;;;11302:21:1;11359:2;11339:18;;;11332:30;11398:34;11378:18;;;11371:62;-1:-1:-1;;;11449:18:1;;;11442:42;11501:19;;27826:73:0;11118:408:1;27826:73:0;-1:-1:-1;27919:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;27919:24:0;;27730:221::o;46328:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27253:411::-;27334:13;27350:23;27365:7;27350:14;:23::i;:::-;27334:39;;27398:5;-1:-1:-1;;;;;27392:11:0;:2;-1:-1:-1;;;;;27392:11:0;;;27384:57;;;;-1:-1:-1;;;27384:57:0;;11733:2:1;27384:57:0;;;11715:21:1;11772:2;11752:18;;;11745:30;11811:34;11791:18;;;11784:62;-1:-1:-1;;;11862:18:1;;;11855:31;11903:19;;27384:57:0;11531:397:1;27384:57:0;2920:10;-1:-1:-1;;;;;27476:21:0;;;;:62;;-1:-1:-1;27501:37:0;27518:5;2920:10;28249:164;:::i;27501:37::-;27454:168;;;;-1:-1:-1;;;27454:168:0;;12135:2:1;27454:168:0;;;12117:21:1;12174:2;12154:18;;;12147:30;12213:34;12193:18;;;12186:62;12284:26;12264:18;;;12257:54;12328:19;;27454:168:0;11933:420:1;27454:168:0;27635:21;27644:2;27648:7;27635:8;:21::i;:::-;27323:341;27253:411;;:::o;28480:339::-;28675:41;2920:10;28708:7;28675:18;:41::i;:::-;28667:103;;;;-1:-1:-1;;;28667:103:0;;;;;;;:::i;:::-;28783:28;28793:4;28799:2;28803:7;28783:9;:28::i;49447:317::-;49561:27;;;49553:82;;;;-1:-1:-1;;;49553:82:0;;12978:2:1;49553:82:0;;;12960:21:1;13017:2;12997:18;;;12990:30;13056:34;13036:18;;;13029:62;-1:-1:-1;;;13107:18:1;;;13100:40;13157:19;;49553:82:0;12776:406:1;49553:82:0;49647:9;49642:117;49662:14;;;49642:117;;;49700:6;-1:-1:-1;;;;;49700:19:0;;49720:10;49732:3;;49736:1;49732:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;49740;;49747:1;49740:9;;;;;;;:::i;:::-;49700:50;;-1:-1:-1;;;;;;49700:50:0;;;;;;;-1:-1:-1;;;;;13577:15:1;;;49700:50:0;;;13559:34:1;13629:15;;;;13609:18;;;13602:43;-1:-1:-1;49740:9:0;;;;;;13661:18:1;;;13654:34;13494:18;;49700:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49692:59;;;;;;49678:3;;;;:::i;:::-;;;;49642:117;;;;49447:317;;;;;:::o;39659:256::-;39756:7;39792:23;39809:5;39792:16;:23::i;:::-;39784:5;:31;39776:87;;;;-1:-1:-1;;;39776:87:0;;14423:2:1;39776:87:0;;;14405:21:1;14462:2;14442:18;;;14435:30;14501:34;14481:18;;;14474:62;-1:-1:-1;;;14552:18:1;;;14545:41;14603:19;;39776:87:0;14221:407:1;39776:87:0;-1:-1:-1;;;;;;39881:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;39659:256::o;48702:741::-;4189:6;;-1:-1:-1;;;;;4189:6:0;2920:10;4336:23;4328:68;;;;-1:-1:-1;;;4328:68:0;;;;;;;:::i;:::-;48948:7:::1;48969:42;49053:3;49025:25;:21;49049:1;49025:25;:::i;:::-;:31;;;;:::i;:::-;48961:100;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48947:114;;;49076:2;49068:11;;;::::0;::::1;;49265:7;49286;4189:6:::0;;-1:-1:-1;;;;;4189:6:0;;4116:87;49286:7:::1;-1:-1:-1::0;;;;;49278:21:0::1;49307;49278:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49264:69;;;49348:2;49340:11;;;::::0;::::1;;48747:696;;48702:741::o:0;28890:185::-;29028:39;29045:4;29051:2;29055:7;29028:39;;;;;;;;;;;;:16;:39::i;47108:348::-;47183:16;47211:23;47237:17;47247:6;47237:9;:17::i;:::-;47211:43;;47261:25;47303:15;47289:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47289:30:0;;47261:58;;47331:9;47326:103;47346:15;47342:1;:19;47326:103;;;47391:30;47411:6;47419:1;47391:19;:30::i;:::-;47377:8;47386:1;47377:11;;;;;;;;:::i;:::-;;;;;;;;;;:44;47363:3;;;;:::i;:::-;;;;47326:103;;;-1:-1:-1;47442:8:0;47108:348;-1:-1:-1;;;47108:348:0:o;48054:80::-;4189:6;;-1:-1:-1;;;;;4189:6:0;2920:10;4336:23;4328:68;;;;-1:-1:-1;;;4328:68:0;;;;;;;:::i;:::-;48113:4:::1;:15:::0;48054:80::o;40181:233::-;40256:7;40292:30;40079:10;:17;;39991:113;40292:30;40284:5;:38;40276:95;;;;-1:-1:-1;;;40276:95:0;;15475:2:1;40276:95:0;;;15457:21:1;15514:2;15494:18;;;15487:30;15553:34;15533:18;;;15526:62;-1:-1:-1;;;15604:18:1;;;15597:42;15656:19;;40276:95:0;15273:408:1;40276:95:0;40389:10;40400:5;40389:17;;;;;;;;:::i;:::-;;;;;;;;;40382:24;;40181:233;;;:::o;48390:98::-;4189:6;;-1:-1:-1;;;;;4189:6:0;2920:10;4336:23;4328:68;;;;-1:-1:-1;;;4328:68:0;;;;;;;:::i;:::-;48461:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;25865:239::-:0;25937:7;25973:16;;;:7;:16;;;;;;-1:-1:-1;;;;;25973:16:0;26008:19;26000:73;;;;-1:-1:-1;;;26000:73:0;;15888:2:1;26000:73:0;;;15870:21:1;15927:2;15907:18;;;15900:30;15966:34;15946:18;;;15939:62;-1:-1:-1;;;16017:18:1;;;16010:39;16066:19;;26000:73:0;15686:405:1;25595:208:0;25667:7;-1:-1:-1;;;;;25695:19:0;;25687:74;;;;-1:-1:-1;;;25687:74:0;;16298:2:1;25687:74:0;;;16280:21:1;16337:2;16317:18;;;16310:30;16376:34;16356:18;;;16349:62;-1:-1:-1;;;16427:18:1;;;16420:40;16477:19;;25687:74:0;16096:406:1;25687:74:0;-1:-1:-1;;;;;;25779:16:0;;;;;:9;:16;;;;;;;25595:208::o;4767:103::-;4189:6;;-1:-1:-1;;;;;4189:6:0;2920:10;4336:23;4328:68;;;;-1:-1:-1;;;4328:68:0;;;;;;;:::i;:::-;4832:30:::1;4859:1;4832:18;:30::i;:::-;4767:103::o:0;50077:347::-;50220:24;;;50212:75;;;;-1:-1:-1;;;50212:75:0;;;;;;;:::i;:::-;50299:9;50294:125;50314:14;;;50294:125;;;50344:6;-1:-1:-1;;;;;50344:23:0;;50368:10;50380:3;;50384:1;50380:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;50388:3;;50392:1;50388:6;;;;;;;:::i;:::-;;;;;;;50396:7;;50404:1;50396:10;;;;;;;:::i;:::-;50344:67;;-1:-1:-1;;;;;;50344:67:0;;;;;;;-1:-1:-1;;;;;17265:15:1;;;50344:67:0;;;17247:34:1;17317:15;;;;17297:18;;;17290:43;-1:-1:-1;17349:18:1;;;17342:34;;;;50396:10:0;;;;;;17392:18:1;;;17385:34;17227:3;17435:19;;;17428:32;-1:-1:-1;17476:19:1;;;17469:30;17516:19;;50344:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50330:3;;;;;:::i;:::-;;;;50294:125;;;;50077:347;;;;;;;:::o;48140:116::-;4189:6;;-1:-1:-1;;;;;4189:6:0;2920:10;4336:23;4328:68;;;;-1:-1:-1;;;4328:68:0;;;;;;;:::i;:::-;48217:13:::1;:33:::0;48140:116::o;26340:104::-;26396:13;26429:7;26422:14;;;;;:::i;46669:433::-;46726:14;46743:13;40079:10;:17;;39991:113;46743:13;46772:6;;46726:30;;-1:-1:-1;46772:6:0;;46771:7;46763:16;;;;;;46808:1;46794:11;:15;46786:24;;;;;;46840:13;;46825:11;:28;;46817:37;;;;;;46893:9;;46869:20;46878:11;46869:6;:20;:::i;:::-;:33;;46861:42;;;;;;4189:6;;-1:-1:-1;;;;;4189:6:0;46916:10;:21;46912:84;;46976:11;46969:4;;:18;;;;:::i;:::-;46956:9;:31;;46948:40;;;;;;47021:1;47004:93;47029:11;47024:1;:16;47004:93;;47056:33;47066:10;47078;47087:1;47078:6;:10;:::i;:::-;47056:9;:33::i;:::-;47042:3;;;;:::i;:::-;;;;47004:93;;28023:155;28118:52;2920:10;28151:8;28161;28118:18;:52::i;47981:65::-;4189:6;;-1:-1:-1;;;;;4189:6:0;2920:10;4336:23;4328:68;;;;-1:-1:-1;;;4328:68:0;;;;;;;:::i;:::-;48025:8:::1;:15:::0;;-1:-1:-1;;48025:15:0::1;;;::::0;;47981:65::o;29146:328::-;29321:41;2920:10;29354:7;29321:18;:41::i;:::-;29313:103;;;;-1:-1:-1;;;29313:103:0;;;;;;;:::i;:::-;29427:39;29441:4;29447:2;29451:7;29460:5;29427:13;:39::i;:::-;29146:328;;;;:::o;46112:37::-;;;;;;;:::i;47462:497::-;31049:4;31073:16;;;:7;:16;;;;;;47560:13;;-1:-1:-1;;;;;31073:16:0;47585:97;;;;-1:-1:-1;;;47585:97:0;;17881:2:1;47585:97:0;;;17863:21:1;17920:2;17900:18;;;17893:30;17959:34;17939:18;;;17932:62;-1:-1:-1;;;18010:18:1;;;18003:45;18065:19;;47585:97:0;17679:411:1;47585:97:0;47698:8;;;;;;;47695:62;;47735:14;47728:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47462:497;;;:::o;47695:62::-;47765:28;47796:10;:8;:10::i;:::-;47765:41;;47851:1;47826:14;47820:28;:32;:133;;;;;;;;;;;;;;;;;47888:14;47904:18;:7;:16;:18::i;:::-;47924:13;47871:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47820:133;47813:140;47462:497;-1:-1:-1;;;47462:497:0:o;49770:301::-;49883:24;;;49875:75;;;;-1:-1:-1;;;49875:75:0;;;;;;;:::i;:::-;49962:9;49957:109;49977:14;;;49957:109;;;50007:6;-1:-1:-1;;;;;50007:23:0;;50031:10;50043:3;;50047:1;50043:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;50051:3;;50055:1;50051:6;;;;;;;:::i;:::-;50007:51;;-1:-1:-1;;;;;;50007:51:0;;;;;;;-1:-1:-1;;;;;13577:15:1;;;50007:51:0;;;13559:34:1;13629:15;;;;13609:18;;;13602:43;-1:-1:-1;50051:6:0;;;;;;13661:18:1;;;13654:34;13494:18;;50007:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49993:3;;;;;:::i;:::-;;;;49957:109;;48494:122;4189:6;;-1:-1:-1;;;;;4189:6:0;2920:10;4336:23;4328:68;;;;-1:-1:-1;;;4328:68:0;;;;;;;:::i;:::-;48577:33;;::::1;::::0;:13:::1;::::0;:33:::1;::::0;::::1;::::0;::::1;:::i;48264:120::-:0;4189:6;;-1:-1:-1;;;;;4189:6:0;2920:10;4336:23;4328:68;;;;-1:-1:-1;;;4328:68:0;;;;;;;:::i;:::-;48346:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;5025:201::-:0;4189:6;;-1:-1:-1;;;;;4189:6:0;2920:10;4336:23;4328:68;;;;-1:-1:-1;;;4328:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5114:22:0;::::1;5106:73;;;::::0;-1:-1:-1;;;5106:73:0;;19955:2:1;5106:73:0::1;::::0;::::1;19937:21:1::0;19994:2;19974:18;;;19967:30;20033:34;20013:18;;;20006:62;-1:-1:-1;;;20084:18:1;;;20077:36;20130:19;;5106:73:0::1;19753:402:1::0;5106:73:0::1;5190:28;5209:8;5190:18;:28::i;:::-;5025:201:::0;:::o;25226:305::-;25328:4;-1:-1:-1;;;;;;25365:40:0;;-1:-1:-1;;;25365:40:0;;:105;;-1:-1:-1;;;;;;;25422:48:0;;-1:-1:-1;;;25422:48:0;25365:105;:158;;;-1:-1:-1;;;;;;;;;;17009:40:0;;;25487:36;16900:157;35130:174;35205:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;35205:29:0;-1:-1:-1;;;;;35205:29:0;;;;;;;;:24;;35259:23;35205:24;35259:14;:23::i;:::-;-1:-1:-1;;;;;35250:46:0;;;;;;;;;;;35130:174;;:::o;31278:348::-;31371:4;31073:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31073:16:0;31388:73;;;;-1:-1:-1;;;31388:73:0;;20362:2:1;31388:73:0;;;20344:21:1;20401:2;20381:18;;;20374:30;20440:34;20420:18;;;20413:62;-1:-1:-1;;;20491:18:1;;;20484:42;20543:19;;31388:73:0;20160:408:1;31388:73:0;31472:13;31488:23;31503:7;31488:14;:23::i;:::-;31472:39;;31541:5;-1:-1:-1;;;;;31530:16:0;:7;-1:-1:-1;;;;;31530:16:0;;:51;;;;31574:7;-1:-1:-1;;;;;31550:31:0;:20;31562:7;31550:11;:20::i;:::-;-1:-1:-1;;;;;31550:31:0;;31530:51;:87;;;-1:-1:-1;;;;;;28370:25:0;;;28346:4;28370:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;31585:32;31522:96;31278:348;-1:-1:-1;;;;31278:348:0:o;34387:625::-;34546:4;-1:-1:-1;;;;;34519:31:0;:23;34534:7;34519:14;:23::i;:::-;-1:-1:-1;;;;;34519:31:0;;34511:81;;;;-1:-1:-1;;;34511:81:0;;20775:2:1;34511:81:0;;;20757:21:1;20814:2;20794:18;;;20787:30;20853:34;20833:18;;;20826:62;-1:-1:-1;;;20904:18:1;;;20897:35;20949:19;;34511:81:0;20573:401:1;34511:81:0;-1:-1:-1;;;;;34611:16:0;;34603:65;;;;-1:-1:-1;;;34603:65:0;;21181:2:1;34603:65:0;;;21163:21:1;21220:2;21200:18;;;21193:30;21259:34;21239:18;;;21232:62;-1:-1:-1;;;21310:18:1;;;21303:34;21354:19;;34603:65:0;20979:400:1;34603:65:0;34681:39;34702:4;34708:2;34712:7;34681:20;:39::i;:::-;34785:29;34802:1;34806:7;34785:8;:29::i;:::-;-1:-1:-1;;;;;34827:15:0;;;;;;:9;:15;;;;;:20;;34846:1;;34827:15;:20;;34846:1;;34827:20;:::i;:::-;;;;-1:-1:-1;;;;;;;34858:13:0;;;;;;:9;:13;;;;;:18;;34875:1;;34858:13;:18;;34875:1;;34858:18;:::i;:::-;;;;-1:-1:-1;;34887:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34887:21:0;-1:-1:-1;;;;;34887:21:0;;;;;;;;;34926:27;;34887:16;;34926:27;;;;;;;27323:341;27253:411;;:::o;5386:191::-;5479:6;;;-1:-1:-1;;;;;5496:17:0;;;-1:-1:-1;;;;;;5496:17:0;;;;;;;5529:40;;5479:6;;;5496:17;5479:6;;5529:40;;5460:16;;5529:40;5449:128;5386:191;:::o;31968:110::-;32044:26;32054:2;32058:7;32044:26;;;;;;;;;;;;:9;:26::i;35446:315::-;35601:8;-1:-1:-1;;;;;35592:17:0;:5;-1:-1:-1;;;;;35592:17:0;;;35584:55;;;;-1:-1:-1;;;35584:55:0;;21716:2:1;35584:55:0;;;21698:21:1;21755:2;21735:18;;;21728:30;21794:27;21774:18;;;21767:55;21839:18;;35584:55:0;21514:349:1;35584:55:0;-1:-1:-1;;;;;35650:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;35650:46:0;;;;;;;;;;35712:41;;540::1;;;35712::0;;513:18:1;35712:41:0;;;;;;;35446:315;;;:::o;30356:::-;30513:28;30523:4;30529:2;30533:7;30513:9;:28::i;:::-;30560:48;30583:4;30589:2;30593:7;30602:5;30560:22;:48::i;:::-;30552:111;;;;-1:-1:-1;;;30552:111:0;;;;;;;:::i;46548:102::-;46608:13;46637:7;46630:14;;;;;:::i;402:723::-;458:13;679:10;675:53;;-1:-1:-1;;706:10:0;;;;;;;;;;;;-1:-1:-1;;;706:10:0;;;;;402:723::o;675:53::-;753:5;738:12;794:78;801:9;;794:78;;827:8;;;;:::i;:::-;;-1:-1:-1;850:10:0;;-1:-1:-1;858:2:0;850:10;;:::i;:::-;;;794:78;;;882:19;914:6;904:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;904:17:0;;882:39;;932:154;939:10;;932:154;;966:11;976:1;966:11;;:::i;:::-;;-1:-1:-1;1035:10:0;1043:2;1035:5;:10;:::i;:::-;1022:24;;:2;:24;:::i;:::-;1009:39;;992:6;999;992:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;992:56:0;;;;;;;;-1:-1:-1;1063:11:0;1072:2;1063:11;;:::i;:::-;;;932:154;;41027:589;-1:-1:-1;;;;;41233:18:0;;41229:187;;41268:40;41300:7;42443:10;:17;;42416:24;;;;:15;:24;;;;;:44;;;42471:24;;;;;;;;;;;;42339:164;41268:40;41229:187;;;41338:2;-1:-1:-1;;;;;41330:10:0;:4;-1:-1:-1;;;;;41330:10:0;;41326:90;;41357:47;41390:4;41396:7;41357:32;:47::i;:::-;-1:-1:-1;;;;;41430:16:0;;41426:183;;41463:45;41500:7;41463:36;:45::i;41426:183::-;41536:4;-1:-1:-1;;;;;41530:10:0;:2;-1:-1:-1;;;;;41530:10:0;;41526:83;;41557:40;41585:2;41589:7;41557:27;:40::i;32305:321::-;32435:18;32441:2;32445:7;32435:5;:18::i;:::-;32486:54;32517:1;32521:2;32525:7;32534:5;32486:22;:54::i;:::-;32464:154;;;;-1:-1:-1;;;32464:154:0;;;;;;;:::i;36326:799::-;36481:4;-1:-1:-1;;;;;36502:13:0;;7112:19;:23;36498:620;;36538:72;;-1:-1:-1;;;36538:72:0;;-1:-1:-1;;;;;36538:36:0;;;;;:72;;2920:10;;36589:4;;36595:7;;36604:5;;36538:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36538:72:0;;;;;;;;-1:-1:-1;;36538:72:0;;;;;;;;;;;;:::i;:::-;;;36534:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36780:13:0;;36776:272;;36823:60;;-1:-1:-1;;;36823:60:0;;;;;;;:::i;36776:272::-;36998:6;36992:13;36983:6;36979:2;36975:15;36968:38;36534:529;-1:-1:-1;;;;;;36661:51:0;-1:-1:-1;;;36661:51:0;;-1:-1:-1;36654:58:0;;36498:620;-1:-1:-1;37102:4:0;36326:799;;;;;;:::o;43130:988::-;43396:22;43446:1;43421:22;43438:4;43421:16;:22::i;:::-;:26;;;;:::i;:::-;43458:18;43479:26;;;:17;:26;;;;;;43396:51;;-1:-1:-1;43612:28:0;;;43608:328;;-1:-1:-1;;;;;43679:18:0;;43657:19;43679:18;;;:12;:18;;;;;;;;:34;;;;;;;;;43730:30;;;;;;:44;;;43847:30;;:17;:30;;;;;:43;;;43608:328;-1:-1:-1;44032:26:0;;;;:17;:26;;;;;;;;44025:33;;;-1:-1:-1;;;;;44076:18:0;;;;;:12;:18;;;;;:34;;;;;;;44069:41;43130:988::o;44413:1079::-;44691:10;:17;44666:22;;44691:21;;44711:1;;44691:21;:::i;:::-;44723:18;44744:24;;;:15;:24;;;;;;45117:10;:26;;44666:46;;-1:-1:-1;44744:24:0;;44666:46;;45117:26;;;;;;:::i;:::-;;;;;;;;;45095:48;;45181:11;45156:10;45167;45156:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;45261:28;;;:15;:28;;;;;;;:41;;;45433:24;;;;;45426:31;45468:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;44484:1008;;;44413:1079;:::o;41917:221::-;42002:14;42019:20;42036:2;42019:16;:20::i;:::-;-1:-1:-1;;;;;42050:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;42095:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;41917:221:0:o;32962:439::-;-1:-1:-1;;;;;33042:16:0;;33034:61;;;;-1:-1:-1;;;33034:61:0;;23486:2:1;33034:61:0;;;23468:21:1;;;23505:18;;;23498:30;23564:34;23544:18;;;23537:62;23616:18;;33034:61:0;23284:356:1;33034:61:0;31049:4;31073:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31073:16:0;:30;33106:58;;;;-1:-1:-1;;;33106:58:0;;23847:2:1;33106:58:0;;;23829:21:1;23886:2;23866:18;;;23859:30;23925;23905:18;;;23898:58;23973:18;;33106:58:0;23645:352:1;33106:58:0;33177:45;33206:1;33210:2;33214:7;33177:20;:45::i;:::-;-1:-1:-1;;;;;33235:13:0;;;;;;:9;:13;;;;;:18;;33252:1;;33235:13;:18;;33252:1;;33235:18;:::i;:::-;;;;-1:-1:-1;;33264:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33264:21:0;-1:-1:-1;;;;;33264:21:0;;;;;;;;33303:33;;33264:16;;;33303:33;;33264:16;;33303:33;48747:696:::1;;48702:741::o:0;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:118::-;678:5;671:13;664:21;657:5;654:32;644:60;;700:1;697;690:12;715:241;771:6;824:2;812:9;803:7;799:23;795:32;792:52;;;840:1;837;830:12;792:52;879:9;866:23;898:28;920:5;898:28;:::i;961:258::-;1033:1;1043:113;1057:6;1054:1;1051:13;1043:113;;;1133:11;;;1127:18;1114:11;;;1107:39;1079:2;1072:10;1043:113;;;1174:6;1171:1;1168:13;1165:48;;;-1:-1:-1;;1209:1:1;1191:16;;1184:27;961:258::o;1224:::-;1266:3;1304:5;1298:12;1331:6;1326:3;1319:19;1347:63;1403:6;1396:4;1391:3;1387:14;1380:4;1373:5;1369:16;1347:63;:::i;:::-;1464:2;1443:15;-1:-1:-1;;1439:29:1;1430:39;;;;1471:4;1426:50;;1224:258;-1:-1:-1;;1224:258:1:o;1487:220::-;1636:2;1625:9;1618:21;1599:4;1656:45;1697:2;1686:9;1682:18;1674:6;1656:45;:::i;1712:180::-;1771:6;1824:2;1812:9;1803:7;1799:23;1795:32;1792:52;;;1840:1;1837;1830:12;1792:52;-1:-1:-1;1863:23:1;;1712:180;-1:-1:-1;1712:180:1:o;2105:131::-;-1:-1:-1;;;;;2180:31:1;;2170:42;;2160:70;;2226:1;2223;2216:12;2241:315;2309:6;2317;2370:2;2358:9;2349:7;2345:23;2341:32;2338:52;;;2386:1;2383;2376:12;2338:52;2425:9;2412:23;2444:31;2469:5;2444:31;:::i;:::-;2494:5;2546:2;2531:18;;;;2518:32;;-1:-1:-1;;;2241:315:1:o;2743:456::-;2820:6;2828;2836;2889:2;2877:9;2868:7;2864:23;2860:32;2857:52;;;2905:1;2902;2895:12;2857:52;2944:9;2931:23;2963:31;2988:5;2963:31;:::i;:::-;3013:5;-1:-1:-1;3070:2:1;3055:18;;3042:32;3083:33;3042:32;3083:33;:::i;:::-;2743:456;;3135:7;;-1:-1:-1;;;3189:2:1;3174:18;;;;3161:32;;2743:456::o;3204:367::-;3267:8;3277:6;3331:3;3324:4;3316:6;3312:17;3308:27;3298:55;;3349:1;3346;3339:12;3298:55;-1:-1:-1;3372:20:1;;3415:18;3404:30;;3401:50;;;3447:1;3444;3437:12;3401:50;3484:4;3476:6;3472:17;3460:29;;3544:3;3537:4;3527:6;3524:1;3520:14;3512:6;3508:27;3504:38;3501:47;3498:67;;;3561:1;3558;3551:12;3498:67;3204:367;;;;;:::o;3576:923::-;3722:6;3730;3738;3746;3754;3807:2;3795:9;3786:7;3782:23;3778:32;3775:52;;;3823:1;3820;3813:12;3775:52;3862:9;3849:23;3881:31;3906:5;3881:31;:::i;:::-;3931:5;-1:-1:-1;3987:2:1;3972:18;;3959:32;4010:18;4040:14;;;4037:34;;;4067:1;4064;4057:12;4037:34;4106:70;4168:7;4159:6;4148:9;4144:22;4106:70;:::i;:::-;4195:8;;-1:-1:-1;4080:96:1;-1:-1:-1;4283:2:1;4268:18;;4255:32;;-1:-1:-1;4299:16:1;;;4296:36;;;4328:1;4325;4318:12;4296:36;;4367:72;4431:7;4420:8;4409:9;4405:24;4367:72;:::i;:::-;3576:923;;;;-1:-1:-1;3576:923:1;;-1:-1:-1;4458:8:1;;4341:98;3576:923;-1:-1:-1;;;3576:923:1:o;4504:247::-;4563:6;4616:2;4604:9;4595:7;4591:23;4587:32;4584:52;;;4632:1;4629;4622:12;4584:52;4671:9;4658:23;4690:31;4715:5;4690:31;:::i;4756:632::-;4927:2;4979:21;;;5049:13;;4952:18;;;5071:22;;;4898:4;;4927:2;5150:15;;;;5124:2;5109:18;;;4898:4;5193:169;5207:6;5204:1;5201:13;5193:169;;;5268:13;;5256:26;;5337:15;;;;5302:12;;;;5229:1;5222:9;5193:169;;;-1:-1:-1;5379:3:1;;4756:632;-1:-1:-1;;;;;;4756:632:1:o;5393:127::-;5454:10;5449:3;5445:20;5442:1;5435:31;5485:4;5482:1;5475:15;5509:4;5506:1;5499:15;5525:632;5590:5;5620:18;5661:2;5653:6;5650:14;5647:40;;;5667:18;;:::i;:::-;5742:2;5736:9;5710:2;5796:15;;-1:-1:-1;;5792:24:1;;;5818:2;5788:33;5784:42;5772:55;;;5842:18;;;5862:22;;;5839:46;5836:72;;;5888:18;;:::i;:::-;5928:10;5924:2;5917:22;5957:6;5948:15;;5987:6;5979;5972:22;6027:3;6018:6;6013:3;6009:16;6006:25;6003:45;;;6044:1;6041;6034:12;6003:45;6094:6;6089:3;6082:4;6074:6;6070:17;6057:44;6149:1;6142:4;6133:6;6125;6121:19;6117:30;6110:41;;;;5525:632;;;;;:::o;6162:451::-;6231:6;6284:2;6272:9;6263:7;6259:23;6255:32;6252:52;;;6300:1;6297;6290:12;6252:52;6340:9;6327:23;6373:18;6365:6;6362:30;6359:50;;;6405:1;6402;6395:12;6359:50;6428:22;;6481:4;6473:13;;6469:27;-1:-1:-1;6459:55:1;;6510:1;6507;6500:12;6459:55;6533:74;6599:7;6594:2;6581:16;6576:2;6572;6568:11;6533:74;:::i;6618:1241::-;6802:6;6810;6818;6826;6834;6842;6850;6903:3;6891:9;6882:7;6878:23;6874:33;6871:53;;;6920:1;6917;6910:12;6871:53;6959:9;6946:23;6978:31;7003:5;6978:31;:::i;:::-;7028:5;-1:-1:-1;7084:2:1;7069:18;;7056:32;7107:18;7137:14;;;7134:34;;;7164:1;7161;7154:12;7134:34;7203:70;7265:7;7256:6;7245:9;7241:22;7203:70;:::i;:::-;7292:8;;-1:-1:-1;7177:96:1;-1:-1:-1;7380:2:1;7365:18;;7352:32;;-1:-1:-1;7396:16:1;;;7393:36;;;7425:1;7422;7415:12;7393:36;7464:72;7528:7;7517:8;7506:9;7502:24;7464:72;:::i;:::-;7555:8;;-1:-1:-1;7438:98:1;-1:-1:-1;7643:2:1;7628:18;;7615:32;;-1:-1:-1;7659:16:1;;;7656:36;;;7688:1;7685;7678:12;7656:36;;7727:72;7791:7;7780:8;7769:9;7765:24;7727:72;:::i;:::-;6618:1241;;;;-1:-1:-1;6618:1241:1;;-1:-1:-1;6618:1241:1;;;;7701:98;;-1:-1:-1;;;6618:1241:1:o;7864:382::-;7929:6;7937;7990:2;7978:9;7969:7;7965:23;7961:32;7958:52;;;8006:1;8003;7996:12;7958:52;8045:9;8032:23;8064:31;8089:5;8064:31;:::i;:::-;8114:5;-1:-1:-1;8171:2:1;8156:18;;8143:32;8184:30;8143:32;8184:30;:::i;:::-;8233:7;8223:17;;;7864:382;;;;;:::o;8251:795::-;8346:6;8354;8362;8370;8423:3;8411:9;8402:7;8398:23;8394:33;8391:53;;;8440:1;8437;8430:12;8391:53;8479:9;8466:23;8498:31;8523:5;8498:31;:::i;:::-;8548:5;-1:-1:-1;8605:2:1;8590:18;;8577:32;8618:33;8577:32;8618:33;:::i;:::-;8670:7;-1:-1:-1;8724:2:1;8709:18;;8696:32;;-1:-1:-1;8779:2:1;8764:18;;8751:32;8806:18;8795:30;;8792:50;;;8838:1;8835;8828:12;8792:50;8861:22;;8914:4;8906:13;;8902:27;-1:-1:-1;8892:55:1;;8943:1;8940;8933:12;8892:55;8966:74;9032:7;9027:2;9014:16;9009:2;9005;9001:11;8966:74;:::i;:::-;8956:84;;;8251:795;;;;;;;:::o;9979:388::-;10047:6;10055;10108:2;10096:9;10087:7;10083:23;10079:32;10076:52;;;10124:1;10121;10114:12;10076:52;10163:9;10150:23;10182:31;10207:5;10182:31;:::i;:::-;10232:5;-1:-1:-1;10289:2:1;10274:18;;10261:32;10302:33;10261:32;10302:33;:::i;10372:356::-;10574:2;10556:21;;;10593:18;;;10586:30;10652:34;10647:2;10632:18;;10625:62;10719:2;10704:18;;10372:356::o;10733:380::-;10812:1;10808:12;;;;10855;;;10876:61;;10930:4;10922:6;10918:17;10908:27;;10876:61;10983:2;10975:6;10972:14;10952:18;10949:38;10946:161;;;11029:10;11024:3;11020:20;11017:1;11010:31;11064:4;11061:1;11054:15;11092:4;11089:1;11082:15;10946:161;;10733:380;;;:::o;12358:413::-;12560:2;12542:21;;;12599:2;12579:18;;;12572:30;12638:34;12633:2;12618:18;;12611:62;-1:-1:-1;;;12704:2:1;12689:18;;12682:47;12761:3;12746:19;;12358:413::o;13187:127::-;13248:10;13243:3;13239:20;13236:1;13229:31;13279:4;13276:1;13269:15;13303:4;13300:1;13293:15;13699:245;13766:6;13819:2;13807:9;13798:7;13794:23;13790:32;13787:52;;;13835:1;13832;13825:12;13787:52;13867:9;13861:16;13886:28;13908:5;13886:28;:::i;13949:127::-;14010:10;14005:3;14001:20;13998:1;13991:31;14041:4;14038:1;14031:15;14065:4;14062:1;14055:15;14081:135;14120:3;-1:-1:-1;;14141:17:1;;14138:43;;;14161:18;;:::i;:::-;-1:-1:-1;14208:1:1;14197:13;;14081:135::o;14633:168::-;14673:7;14739:1;14735;14731:6;14727:14;14724:1;14721:21;14716:1;14709:9;14702:17;14698:45;14695:71;;;14746:18;;:::i;:::-;-1:-1:-1;14786:9:1;;14633:168::o;14806:127::-;14867:10;14862:3;14858:20;14855:1;14848:31;14898:4;14895:1;14888:15;14922:4;14919:1;14912:15;14938:120;14978:1;15004;14994:35;;15009:18;;:::i;:::-;-1:-1:-1;15043:9:1;;14938:120::o;16507:402::-;16709:2;16691:21;;;16748:2;16728:18;;;16721:30;16787:34;16782:2;16767:18;;16760:62;-1:-1:-1;;;16853:2:1;16838:18;;16831:36;16899:3;16884:19;;16507:402::o;17546:128::-;17586:3;17617:1;17613:6;17610:1;17607:13;17604:39;;;17623:18;;:::i;:::-;-1:-1:-1;17659:9:1;;17546:128::o;18221:1527::-;18445:3;18483:6;18477:13;18509:4;18522:51;18566:6;18561:3;18556:2;18548:6;18544:15;18522:51;:::i;:::-;18636:13;;18595:16;;;;18658:55;18636:13;18595:16;18680:15;;;18658:55;:::i;:::-;18802:13;;18735:20;;;18775:1;;18862;18884:18;;;;18937;;;;18964:93;;19042:4;19032:8;19028:19;19016:31;;18964:93;19105:2;19095:8;19092:16;19072:18;19069:40;19066:167;;;-1:-1:-1;;;19132:33:1;;19188:4;19185:1;19178:15;19218:4;19139:3;19206:17;19066:167;19249:18;19276:110;;;;19400:1;19395:328;;;;19242:481;;19276:110;-1:-1:-1;;19311:24:1;;19297:39;;19356:20;;;;-1:-1:-1;19276:110:1;;19395:328;18168:1;18161:14;;;18205:4;18192:18;;19490:1;19504:169;19518:8;19515:1;19512:15;19504:169;;;19600:14;;19585:13;;;19578:37;19643:16;;;;19535:10;;19504:169;;;19508:3;;19704:8;19697:5;19693:20;19686:27;;19242:481;-1:-1:-1;19739:3:1;;18221:1527;-1:-1:-1;;;;;;;;;;;18221:1527:1:o;21384:125::-;21424:4;21452:1;21449;21446:8;21443:34;;;21457:18;;:::i;:::-;-1:-1:-1;21494:9:1;;21384:125::o;21868:414::-;22070:2;22052:21;;;22109:2;22089:18;;;22082:30;22148:34;22143:2;22128:18;;22121:62;-1:-1:-1;;;22214:2:1;22199:18;;22192:48;22272:3;22257:19;;21868:414::o;22287:112::-;22319:1;22345;22335:35;;22350:18;;:::i;:::-;-1:-1:-1;22384:9:1;;22287:112::o;22404:489::-;-1:-1:-1;;;;;22673:15:1;;;22655:34;;22725:15;;22720:2;22705:18;;22698:43;22772:2;22757:18;;22750:34;;;22820:3;22815:2;22800:18;;22793:31;;;22598:4;;22841:46;;22867:19;;22859:6;22841:46;:::i;:::-;22833:54;22404:489;-1:-1:-1;;;;;;22404:489:1:o;22898:249::-;22967:6;23020:2;23008:9;22999:7;22995:23;22991:32;22988:52;;;23036:1;23033;23026:12;22988:52;23068:9;23062:16;23087:30;23111:5;23087:30;:::i;23152:127::-;23213:10;23208:3;23204:20;23201:1;23194:31;23244:4;23241:1;23234:15;23268:4;23265:1;23258:15
Swarm Source
ipfs://db2ff5b332c69dfc44647017d697f474f2de8571ffb79fe7d6ed6ec7bba78ad7
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.