Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
[ Download CSV Export ]
Contract Name:
TestPartyApe
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-06-23 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts 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 (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must 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 Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.6.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 overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not 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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits 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/ERC721Burnable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Burnable.sol) pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } // 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/TestPartyApe.sol pragma solidity ^0.8.13; contract TestPartyApe is ERC721, ERC721Enumerable, ERC721Burnable, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; constructor() ERC721("TestPartyApe", "TPAPE") {} function _baseURI() internal pure override returns (string memory) { return "https://polkaparty.mypinata.cloud/ipfs/QmYUhj9Daf29SxiMUTdbo7CXdtis7ypmpReki4SSiaDJcn/"; } function mint() public { uint256 tokenId = _tokenIdCounter.current(); _tokenIdCounter.increment(); _safeMint(msg.sender, tokenId); } // The following functions are overrides required by Solidity. function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","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":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040518060400160405280600c81526020017f54657374506172747941706500000000000000000000000000000000000000008152506040518060400160405280600581526020017f5450415045000000000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620001a6565b508060019080519060200190620000af929190620001a6565b505050620000d2620000c6620000d860201b60201c565b620000e060201b60201c565b620002ba565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b49062000285565b90600052602060002090601f016020900481019282620001d8576000855562000224565b82601f10620001f357805160ff191683800117855562000224565b8280016001018555821562000224579182015b828111156200022357825182559160200191906001019062000206565b5b50905062000233919062000237565b5090565b5b808211156200025257600081600090555060010162000238565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200029e57607f821691505b602082108103620002b457620002b362000256565b5b50919050565b61359a80620002ca6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80634f6ccce7116100b857806395d89b411161007c57806395d89b411461033a578063a22cb46514610358578063b88d4fde14610374578063c87b56dd14610390578063e985e9c5146103c0578063f2fde38b146103f057610137565b80634f6ccce7146102825780636352211e146102b257806370a08231146102e2578063715018a6146103125780638da5cb5b1461031c57610137565b806318160ddd116100ff57806318160ddd146101e057806323b872dd146101fe5780632f745c591461021a57806342842e0e1461024a57806342966c681461026657610137565b806301ffc9a71461013c57806306fdde031461016c578063081812fc1461018a578063095ea7b3146101ba5780631249c58b146101d6575b600080fd5b610156600480360381019061015191906121e6565b61040c565b604051610163919061222e565b60405180910390f35b61017461041e565b60405161018191906122e2565b60405180910390f35b6101a4600480360381019061019f919061233a565b6104b0565b6040516101b191906123a8565b60405180910390f35b6101d460048036038101906101cf91906123ef565b610535565b005b6101de61064c565b005b6101e8610671565b6040516101f5919061243e565b60405180910390f35b61021860048036038101906102139190612459565b61067e565b005b610234600480360381019061022f91906123ef565b6106de565b604051610241919061243e565b60405180910390f35b610264600480360381019061025f9190612459565b610783565b005b610280600480360381019061027b919061233a565b6107a3565b005b61029c6004803603810190610297919061233a565b6107ff565b6040516102a9919061243e565b60405180910390f35b6102cc60048036038101906102c7919061233a565b610870565b6040516102d991906123a8565b60405180910390f35b6102fc60048036038101906102f791906124ac565b610921565b604051610309919061243e565b60405180910390f35b61031a6109d8565b005b610324610a60565b60405161033191906123a8565b60405180910390f35b610342610a8a565b60405161034f91906122e2565b60405180910390f35b610372600480360381019061036d9190612505565b610b1c565b005b61038e6004803603810190610389919061267a565b610b32565b005b6103aa60048036038101906103a5919061233a565b610b94565b6040516103b791906122e2565b60405180910390f35b6103da60048036038101906103d591906126fd565b610c3b565b6040516103e7919061222e565b60405180910390f35b61040a600480360381019061040591906124ac565b610ccf565b005b600061041782610dc6565b9050919050565b60606000805461042d9061276c565b80601f01602080910402602001604051908101604052809291908181526020018280546104599061276c565b80156104a65780601f1061047b576101008083540402835291602001916104a6565b820191906000526020600020905b81548152906001019060200180831161048957829003601f168201915b5050505050905090565b60006104bb82610e40565b6104fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f19061280f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061054082610870565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a7906128a1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166105cf610eac565b73ffffffffffffffffffffffffffffffffffffffff1614806105fe57506105fd816105f8610eac565b610c3b565b5b61063d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063490612933565b60405180910390fd5b6106478383610eb4565b505050565b6000610658600b610f6d565b9050610664600b610f7b565b61066e3382610f91565b50565b6000600880549050905090565b61068f610689610eac565b82610faf565b6106ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c5906129c5565b60405180910390fd5b6106d983838361108d565b505050565b60006106e983610921565b821061072a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072190612a57565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b61079e83838360405180602001604052806000815250610b32565b505050565b6107b46107ae610eac565b82610faf565b6107f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ea90612ae9565b60405180910390fd5b6107fc816112f3565b50565b6000610809610671565b821061084a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084190612b7b565b60405180910390fd5b6008828154811061085e5761085d612b9b565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090f90612c3c565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098890612cce565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109e0610eac565b73ffffffffffffffffffffffffffffffffffffffff166109fe610a60565b73ffffffffffffffffffffffffffffffffffffffff1614610a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4b90612d3a565b60405180910390fd5b610a5e6000611410565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610a999061276c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac59061276c565b8015610b125780601f10610ae757610100808354040283529160200191610b12565b820191906000526020600020905b815481529060010190602001808311610af557829003601f168201915b5050505050905090565b610b2e610b27610eac565b83836114d6565b5050565b610b43610b3d610eac565b83610faf565b610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b79906129c5565b60405180910390fd5b610b8e84848484611642565b50505050565b6060610b9f82610e40565b610bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd590612dcc565b60405180910390fd5b6000610be861169e565b90506000815111610c085760405180602001604052806000815250610c33565b80610c12846116be565b604051602001610c23929190612e28565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610cd7610eac565b73ffffffffffffffffffffffffffffffffffffffff16610cf5610a60565b73ffffffffffffffffffffffffffffffffffffffff1614610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4290612d3a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db190612ebe565b60405180910390fd5b610dc381611410565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e395750610e388261181e565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610f2783610870565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6001816000016000828254019250508190555050565b610fab828260405180602001604052806000815250611900565b5050565b6000610fba82610e40565b610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff090612f50565b60405180910390fd5b600061100483610870565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061104657506110458185610c3b565b5b8061108457508373ffffffffffffffffffffffffffffffffffffffff1661106c846104b0565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166110ad82610870565b73ffffffffffffffffffffffffffffffffffffffff1614611103576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fa90612fe2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116990613074565b60405180910390fd5b61117d83838361195b565b611188600082610eb4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111d891906130c3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461122f91906130f7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46112ee83838361196b565b505050565b60006112fe82610870565b905061130c8160008461195b565b611317600083610eb4565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461136791906130c3565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461140c8160008461196b565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153b90613199565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611635919061222e565b60405180910390a3505050565b61164d84848461108d565b61165984848484611970565b611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f9061322b565b60405180910390fd5b50505050565b606060405180608001604052806056815260200161350f60569139905090565b606060008203611705576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611819565b600082905060005b600082146117375780806117209061324b565b915050600a8261173091906132c2565b915061170d565b60008167ffffffffffffffff8111156117535761175261254f565b5b6040519080825280601f01601f1916602001820160405280156117855781602001600182028036833780820191505090505b5090505b600085146118125760018261179e91906130c3565b9150600a856117ad91906132f3565b60306117b991906130f7565b60f81b8183815181106117cf576117ce612b9b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561180b91906132c2565b9450611789565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806118e957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806118f957506118f882611af7565b5b9050919050565b61190a8383611b61565b6119176000848484611970565b611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d9061322b565b60405180910390fd5b505050565b611966838383611d3a565b505050565b505050565b60006119918473ffffffffffffffffffffffffffffffffffffffff16611e4c565b15611aea578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026119ba610eac565b8786866040518563ffffffff1660e01b81526004016119dc9493929190613379565b6020604051808303816000875af1925050508015611a1857506040513d601f19601f82011682018060405250810190611a1591906133da565b60015b611a9a573d8060008114611a48576040519150601f19603f3d011682016040523d82523d6000602084013e611a4d565b606091505b506000815103611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a899061322b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611aef565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc790613453565b60405180910390fd5b611bd981610e40565b15611c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c10906134bf565b60405180910390fd5b611c256000838361195b565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c7591906130f7565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d366000838361196b565b5050565b611d45838383611e6f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d8757611d8281611e74565b611dc6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611dc557611dc48382611ebd565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e0857611e038161202a565b611e47565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611e4657611e4582826120fb565b5b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611eca84610921565b611ed491906130c3565b9050600060076000848152602001908152602001600020549050818114611fb9576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061203e91906130c3565b905060006009600084815260200190815260200160002054905060006008838154811061206e5761206d612b9b565b5b9060005260206000200154905080600883815481106120905761208f612b9b565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806120df576120de6134df565b5b6001900381819060005260206000200160009055905550505050565b600061210683610921565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6121c38161218e565b81146121ce57600080fd5b50565b6000813590506121e0816121ba565b92915050565b6000602082840312156121fc576121fb612184565b5b600061220a848285016121d1565b91505092915050565b60008115159050919050565b61222881612213565b82525050565b6000602082019050612243600083018461221f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612283578082015181840152602081019050612268565b83811115612292576000848401525b50505050565b6000601f19601f8301169050919050565b60006122b482612249565b6122be8185612254565b93506122ce818560208601612265565b6122d781612298565b840191505092915050565b600060208201905081810360008301526122fc81846122a9565b905092915050565b6000819050919050565b61231781612304565b811461232257600080fd5b50565b6000813590506123348161230e565b92915050565b6000602082840312156123505761234f612184565b5b600061235e84828501612325565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061239282612367565b9050919050565b6123a281612387565b82525050565b60006020820190506123bd6000830184612399565b92915050565b6123cc81612387565b81146123d757600080fd5b50565b6000813590506123e9816123c3565b92915050565b6000806040838503121561240657612405612184565b5b6000612414858286016123da565b925050602061242585828601612325565b9150509250929050565b61243881612304565b82525050565b6000602082019050612453600083018461242f565b92915050565b60008060006060848603121561247257612471612184565b5b6000612480868287016123da565b9350506020612491868287016123da565b92505060406124a286828701612325565b9150509250925092565b6000602082840312156124c2576124c1612184565b5b60006124d0848285016123da565b91505092915050565b6124e281612213565b81146124ed57600080fd5b50565b6000813590506124ff816124d9565b92915050565b6000806040838503121561251c5761251b612184565b5b600061252a858286016123da565b925050602061253b858286016124f0565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61258782612298565b810181811067ffffffffffffffff821117156125a6576125a561254f565b5b80604052505050565b60006125b961217a565b90506125c5828261257e565b919050565b600067ffffffffffffffff8211156125e5576125e461254f565b5b6125ee82612298565b9050602081019050919050565b82818337600083830152505050565b600061261d612618846125ca565b6125af565b9050828152602081018484840111156126395761263861254a565b5b6126448482856125fb565b509392505050565b600082601f83011261266157612660612545565b5b813561267184826020860161260a565b91505092915050565b6000806000806080858703121561269457612693612184565b5b60006126a2878288016123da565b94505060206126b3878288016123da565b93505060406126c487828801612325565b925050606085013567ffffffffffffffff8111156126e5576126e4612189565b5b6126f18782880161264c565b91505092959194509250565b6000806040838503121561271457612713612184565b5b6000612722858286016123da565b9250506020612733858286016123da565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061278457607f821691505b6020821081036127975761279661273d565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006127f9602c83612254565b91506128048261279d565b604082019050919050565b60006020820190508181036000830152612828816127ec565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061288b602183612254565b91506128968261282f565b604082019050919050565b600060208201905081810360008301526128ba8161287e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061291d603883612254565b9150612928826128c1565b604082019050919050565b6000602082019050818103600083015261294c81612910565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006129af603183612254565b91506129ba82612953565b604082019050919050565b600060208201905081810360008301526129de816129a2565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000612a41602b83612254565b9150612a4c826129e5565b604082019050919050565b60006020820190508181036000830152612a7081612a34565b9050919050565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b6000612ad3603083612254565b9150612ade82612a77565b604082019050919050565b60006020820190508181036000830152612b0281612ac6565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000612b65602c83612254565b9150612b7082612b09565b604082019050919050565b60006020820190508181036000830152612b9481612b58565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612c26602983612254565b9150612c3182612bca565b604082019050919050565b60006020820190508181036000830152612c5581612c19565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000612cb8602a83612254565b9150612cc382612c5c565b604082019050919050565b60006020820190508181036000830152612ce781612cab565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612d24602083612254565b9150612d2f82612cee565b602082019050919050565b60006020820190508181036000830152612d5381612d17565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000612db6602f83612254565b9150612dc182612d5a565b604082019050919050565b60006020820190508181036000830152612de581612da9565b9050919050565b600081905092915050565b6000612e0282612249565b612e0c8185612dec565b9350612e1c818560208601612265565b80840191505092915050565b6000612e348285612df7565b9150612e408284612df7565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ea8602683612254565b9150612eb382612e4c565b604082019050919050565b60006020820190508181036000830152612ed781612e9b565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612f3a602c83612254565b9150612f4582612ede565b604082019050919050565b60006020820190508181036000830152612f6981612f2d565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000612fcc602583612254565b9150612fd782612f70565b604082019050919050565b60006020820190508181036000830152612ffb81612fbf565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061305e602483612254565b915061306982613002565b604082019050919050565b6000602082019050818103600083015261308d81613051565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130ce82612304565b91506130d983612304565b9250828210156130ec576130eb613094565b5b828203905092915050565b600061310282612304565b915061310d83612304565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561314257613141613094565b5b828201905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613183601983612254565b915061318e8261314d565b602082019050919050565b600060208201905081810360008301526131b281613176565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613215603283612254565b9150613220826131b9565b604082019050919050565b6000602082019050818103600083015261324481613208565b9050919050565b600061325682612304565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361328857613287613094565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006132cd82612304565b91506132d883612304565b9250826132e8576132e7613293565b5b828204905092915050565b60006132fe82612304565b915061330983612304565b92508261331957613318613293565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b600061334b82613324565b613355818561332f565b9350613365818560208601612265565b61336e81612298565b840191505092915050565b600060808201905061338e6000830187612399565b61339b6020830186612399565b6133a8604083018561242f565b81810360608301526133ba8184613340565b905095945050505050565b6000815190506133d4816121ba565b92915050565b6000602082840312156133f0576133ef612184565b5b60006133fe848285016133c5565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061343d602083612254565b915061344882613407565b602082019050919050565b6000602082019050818103600083015261346c81613430565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006134a9601c83612254565b91506134b482613473565b602082019050919050565b600060208201905081810360008301526134d88161349c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe68747470733a2f2f706f6c6b6170617274792e6d7970696e6174612e636c6f75642f697066732f516d5955686a3944616632395378694d555464626f374358647469733779706d7052656b693453536961444a636e2fa2646970667358221220a4e514933bf7ecdc49808bc5505bbef9674848ac622aed5dba7fae840ee4018c64736f6c634300080d0033
Deployed ByteCode Sourcemap
47833:1089:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48707:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27637:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29197:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28720:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48253:164;;;:::i;:::-;;42246:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29947:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41914:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30357:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40343:245;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42436:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27331:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27061:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6195:103;;;:::i;:::-;;5544:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27806:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29490:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30613:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27981:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29716:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6453:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48707:212;48846:4;48875:36;48899:11;48875:23;:36::i;:::-;48868:43;;48707:212;;;:::o;27637:100::-;27691:13;27724:5;27717:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27637:100;:::o;29197:221::-;29273:7;29301:16;29309:7;29301;:16::i;:::-;29293:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29386:15;:24;29402:7;29386:24;;;;;;;;;;;;;;;;;;;;;29379:31;;29197:221;;;:::o;28720:411::-;28801:13;28817:23;28832:7;28817:14;:23::i;:::-;28801:39;;28865:5;28859:11;;:2;:11;;;28851:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28959:5;28943:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28968:37;28985:5;28992:12;:10;:12::i;:::-;28968:16;:37::i;:::-;28943:62;28921:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29102:21;29111:2;29115:7;29102:8;:21::i;:::-;28790:341;28720:411;;:::o;48253:164::-;48287:15;48305:25;:15;:23;:25::i;:::-;48287:43;;48341:27;:15;:25;:27::i;:::-;48379:30;48389:10;48401:7;48379:9;:30::i;:::-;48276:141;48253:164::o;42246:113::-;42307:7;42334:10;:17;;;;42327:24;;42246:113;:::o;29947:339::-;30142:41;30161:12;:10;:12::i;:::-;30175:7;30142:18;:41::i;:::-;30134:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30250:28;30260:4;30266:2;30270:7;30250:9;:28::i;:::-;29947:339;;;:::o;41914:256::-;42011:7;42047:23;42064:5;42047:16;:23::i;:::-;42039:5;:31;42031:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42136:12;:19;42149:5;42136:19;;;;;;;;;;;;;;;:26;42156:5;42136:26;;;;;;;;;;;;42129:33;;41914:256;;;;:::o;30357:185::-;30495:39;30512:4;30518:2;30522:7;30495:39;;;;;;;;;;;;:16;:39::i;:::-;30357:185;;;:::o;40343:245::-;40461:41;40480:12;:10;:12::i;:::-;40494:7;40461:18;:41::i;:::-;40453:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;40566:14;40572:7;40566:5;:14::i;:::-;40343:245;:::o;42436:233::-;42511:7;42547:30;:28;:30::i;:::-;42539:5;:38;42531:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;42644:10;42655:5;42644:17;;;;;;;;:::i;:::-;;;;;;;;;;42637:24;;42436:233;;;:::o;27331:239::-;27403:7;27423:13;27439:7;:16;27447:7;27439:16;;;;;;;;;;;;;;;;;;;;;27423:32;;27491:1;27474:19;;:5;:19;;;27466:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27557:5;27550:12;;;27331:239;;;:::o;27061:208::-;27133:7;27178:1;27161:19;;:5;:19;;;27153:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27245:9;:16;27255:5;27245:16;;;;;;;;;;;;;;;;27238:23;;27061:208;;;:::o;6195:103::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:30:::1;6287:1;6260:18;:30::i;:::-;6195:103::o:0;5544:87::-;5590:7;5617:6;;;;;;;;;;;5610:13;;5544:87;:::o;27806:104::-;27862:13;27895:7;27888:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27806:104;:::o;29490:155::-;29585:52;29604:12;:10;:12::i;:::-;29618:8;29628;29585:18;:52::i;:::-;29490:155;;:::o;30613:328::-;30788:41;30807:12;:10;:12::i;:::-;30821:7;30788:18;:41::i;:::-;30780:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30894:39;30908:4;30914:2;30918:7;30927:5;30894:13;:39::i;:::-;30613:328;;;;:::o;27981:334::-;28054:13;28088:16;28096:7;28088;:16::i;:::-;28080:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28169:21;28193:10;:8;:10::i;:::-;28169:34;;28245:1;28227:7;28221:21;:25;:86;;;;;;;;;;;;;;;;;28273:7;28282:18;:7;:16;:18::i;:::-;28256:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28221:86;28214:93;;;27981:334;;;:::o;29716:164::-;29813:4;29837:18;:25;29856:5;29837:25;;;;;;;;;;;;;;;:35;29863:8;29837:35;;;;;;;;;;;;;;;;;;;;;;;;;29830:42;;29716:164;;;;:::o;6453:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6562:1:::1;6542:22;;:8;:22;;::::0;6534:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6618:28;6637:8;6618:18;:28::i;:::-;6453:201:::0;:::o;41606:224::-;41708:4;41747:35;41732:50;;;:11;:50;;;;:90;;;;41786:36;41810:11;41786:23;:36::i;:::-;41732:90;41725:97;;41606:224;;;:::o;32451:127::-;32516:4;32568:1;32540:30;;:7;:16;32548:7;32540:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32533:37;;32451:127;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;36597:174::-;36699:2;36672:15;:24;36688:7;36672:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36755:7;36751:2;36717:46;;36726:23;36741:7;36726:14;:23::i;:::-;36717:46;;;;;;;;;;;;36597:174;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;33435:110::-;33511:26;33521:2;33525:7;33511:26;;;;;;;;;;;;:9;:26::i;:::-;33435:110;;:::o;32745:348::-;32838:4;32863:16;32871:7;32863;:16::i;:::-;32855:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32939:13;32955:23;32970:7;32955:14;:23::i;:::-;32939:39;;33008:5;32997:16;;:7;:16;;;:52;;;;33017:32;33034:5;33041:7;33017:16;:32::i;:::-;32997:52;:87;;;;33077:7;33053:31;;:20;33065:7;33053:11;:20::i;:::-;:31;;;32997:87;32989:96;;;32745:348;;;;:::o;35854:625::-;36013:4;35986:31;;:23;36001:7;35986:14;:23::i;:::-;:31;;;35978:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36092:1;36078:16;;:2;:16;;;36070:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36148:39;36169:4;36175:2;36179:7;36148:20;:39::i;:::-;36252:29;36269:1;36273:7;36252:8;:29::i;:::-;36313:1;36294:9;:15;36304:4;36294:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36342:1;36325:9;:13;36335:2;36325:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36373:2;36354:7;:16;36362:7;36354:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36412:7;36408:2;36393:27;;36402:4;36393:27;;;;;;;;;;;;36433:38;36453:4;36459:2;36463:7;36433:19;:38::i;:::-;35854:625;;;:::o;35097:420::-;35157:13;35173:23;35188:7;35173:14;:23::i;:::-;35157:39;;35209:48;35230:5;35245:1;35249:7;35209:20;:48::i;:::-;35298:29;35315:1;35319:7;35298:8;:29::i;:::-;35360:1;35340:9;:16;35350:5;35340:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;35379:7;:16;35387:7;35379:16;;;;;;;;;;;;35372:23;;;;;;;;;;;35441:7;35437:1;35413:36;;35422:5;35413:36;;;;;;;;;;;;35462:47;35482:5;35497:1;35501:7;35462:19;:47::i;:::-;35146:371;35097:420;:::o;6814:191::-;6888:16;6907:6;;;;;;;;;;;6888:25;;6933:8;6924:6;;:17;;;;;;;;;;;;;;;;;;6988:8;6957:40;;6978:8;6957:40;;;;;;;;;;;;6877:128;6814:191;:::o;36913:315::-;37068:8;37059:17;;:5;:17;;;37051:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37155:8;37117:18;:25;37136:5;37117:25;;;;;;;;;;;;;;;:35;37143:8;37117:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37201:8;37179:41;;37194:5;37179:41;;;37211:8;37179:41;;;;;;:::i;:::-;;;;;;;;36913:315;;;:::o;31823:::-;31980:28;31990:4;31996:2;32000:7;31980:9;:28::i;:::-;32027:48;32050:4;32056:2;32060:7;32069:5;32027:22;:48::i;:::-;32019:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31823:315;;;;:::o;48064:181::-;48116:13;48142:95;;;;;;;;;;;;;;;;;;;48064:181;:::o;1830:723::-;1886:13;2116:1;2107:5;:10;2103:53;;2134:10;;;;;;;;;;;;;;;;;;;;;2103:53;2166:12;2181:5;2166:20;;2197:14;2222:78;2237:1;2229:4;:9;2222:78;;2255:8;;;;;:::i;:::-;;;;2286:2;2278:10;;;;;:::i;:::-;;;2222:78;;;2310:19;2342:6;2332:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:39;;2360:154;2376:1;2367:5;:10;2360:154;;2404:1;2394:11;;;;;:::i;:::-;;;2471:2;2463:5;:10;;;;:::i;:::-;2450:2;:24;;;;:::i;:::-;2437:39;;2420:6;2427;2420:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2500:2;2491:11;;;;;:::i;:::-;;;2360:154;;;2538:6;2524:21;;;;;1830:723;;;;:::o;26692:305::-;26794:4;26846:25;26831:40;;;:11;:40;;;;:105;;;;26903:33;26888:48;;;:11;:48;;;;26831:105;:158;;;;26953:36;26977:11;26953:23;:36::i;:::-;26831:158;26811:178;;26692:305;;;:::o;33772:321::-;33902:18;33908:2;33912:7;33902:5;:18::i;:::-;33953:54;33984:1;33988:2;33992:7;34001:5;33953:22;:54::i;:::-;33931:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33772:321;;;:::o;48495:204::-;48646:45;48673:4;48679:2;48683:7;48646:26;:45::i;:::-;48495:204;;;:::o;39675:125::-;;;;:::o;37793:799::-;37948:4;37969:15;:2;:13;;;:15::i;:::-;37965:620;;;38021:2;38005:36;;;38042:12;:10;:12::i;:::-;38056:4;38062:7;38071:5;38005:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38001:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38264:1;38247:6;:13;:18;38243:272;;38290:60;;;;;;;;;;:::i;:::-;;;;;;;;38243:272;38465:6;38459:13;38450:6;38446:2;38442:15;38435:38;38001:529;38138:41;;;38128:51;;;:6;:51;;;;38121:58;;;;;37965:620;38569:4;38562:11;;37793:799;;;;;;;:::o;18351:157::-;18436:4;18475:25;18460:40;;;:11;:40;;;;18453:47;;18351:157;;;:::o;34429:439::-;34523:1;34509:16;;:2;:16;;;34501:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34582:16;34590:7;34582;:16::i;:::-;34581:17;34573:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34644:45;34673:1;34677:2;34681:7;34644:20;:45::i;:::-;34719:1;34702:9;:13;34712:2;34702:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34750:2;34731:7;:16;34739:7;34731:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34795:7;34791:2;34770:33;;34787:1;34770:33;;;;;;;;;;;;34816:44;34844:1;34848:2;34852:7;34816:19;:44::i;:::-;34429:439;;:::o;43282:589::-;43426:45;43453:4;43459:2;43463:7;43426:26;:45::i;:::-;43504:1;43488:18;;:4;:18;;;43484:187;;43523:40;43555:7;43523:31;:40::i;:::-;43484:187;;;43593:2;43585:10;;:4;:10;;;43581:90;;43612:47;43645:4;43651:7;43612:32;:47::i;:::-;43581:90;43484:187;43699:1;43685:16;;:2;:16;;;43681:183;;43718:45;43755:7;43718:36;:45::i;:::-;43681:183;;;43791:4;43785:10;;:2;:10;;;43781:83;;43812:40;43840:2;43844:7;43812:27;:40::i;:::-;43781:83;43681:183;43282:589;;;:::o;8245:326::-;8305:4;8562:1;8540:7;:19;;;:23;8533:30;;8245:326;;;:::o;39164:126::-;;;;:::o;44594:164::-;44698:10;:17;;;;44671:15;:24;44687:7;44671:24;;;;;;;;;;;:44;;;;44726:10;44742:7;44726:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44594:164;:::o;45385:988::-;45651:22;45701:1;45676:22;45693:4;45676:16;:22::i;:::-;:26;;;;:::i;:::-;45651:51;;45713:18;45734:17;:26;45752:7;45734:26;;;;;;;;;;;;45713:47;;45881:14;45867:10;:28;45863:328;;45912:19;45934:12;:18;45947:4;45934:18;;;;;;;;;;;;;;;:34;45953:14;45934:34;;;;;;;;;;;;45912:56;;46018:11;45985:12;:18;45998:4;45985:18;;;;;;;;;;;;;;;:30;46004:10;45985:30;;;;;;;;;;;:44;;;;46135:10;46102:17;:30;46120:11;46102:30;;;;;;;;;;;:43;;;;45897:294;45863:328;46287:17;:26;46305:7;46287:26;;;;;;;;;;;46280:33;;;46331:12;:18;46344:4;46331:18;;;;;;;;;;;;;;;:34;46350:14;46331:34;;;;;;;;;;;46324:41;;;45466:907;;45385:988;;:::o;46668:1079::-;46921:22;46966:1;46946:10;:17;;;;:21;;;;:::i;:::-;46921:46;;46978:18;46999:15;:24;47015:7;46999:24;;;;;;;;;;;;46978:45;;47350:19;47372:10;47383:14;47372:26;;;;;;;;:::i;:::-;;;;;;;;;;47350:48;;47436:11;47411:10;47422;47411:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;47547:10;47516:15;:28;47532:11;47516:28;;;;;;;;;;;:41;;;;47688:15;:24;47704:7;47688:24;;;;;;;;;;;47681:31;;;47723:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46739:1008;;;46668:1079;:::o;44172:221::-;44257:14;44274:20;44291:2;44274:16;:20::i;:::-;44257:37;;44332:7;44305:12;:16;44318:2;44305:16;;;;;;;;;;;;;;;:24;44322:6;44305:24;;;;;;;;;;;:34;;;;44379:6;44350:17;:26;44368:7;44350:26;;;;;;;;;;;:35;;;;44246:147;44172:221;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:116::-;6320:21;6335:5;6320:21;:::i;:::-;6313:5;6310:32;6300:60;;6356:1;6353;6346:12;6300:60;6250:116;:::o;6372:133::-;6415:5;6453:6;6440:20;6431:29;;6469:30;6493:5;6469:30;:::i;:::-;6372:133;;;;:::o;6511:468::-;6576:6;6584;6633:2;6621:9;6612:7;6608:23;6604:32;6601:119;;;6639:79;;:::i;:::-;6601:119;6759:1;6784:53;6829:7;6820:6;6809:9;6805:22;6784:53;:::i;:::-;6774:63;;6730:117;6886:2;6912:50;6954:7;6945:6;6934:9;6930:22;6912:50;:::i;:::-;6902:60;;6857:115;6511:468;;;;;:::o;6985:117::-;7094:1;7091;7084:12;7108:117;7217:1;7214;7207:12;7231:180;7279:77;7276:1;7269:88;7376:4;7373:1;7366:15;7400:4;7397:1;7390:15;7417:281;7500:27;7522:4;7500:27;:::i;:::-;7492:6;7488:40;7630:6;7618:10;7615:22;7594:18;7582:10;7579:34;7576:62;7573:88;;;7641:18;;:::i;:::-;7573:88;7681:10;7677:2;7670:22;7460:238;7417:281;;:::o;7704:129::-;7738:6;7765:20;;:::i;:::-;7755:30;;7794:33;7822:4;7814:6;7794:33;:::i;:::-;7704:129;;;:::o;7839:307::-;7900:4;7990:18;7982:6;7979:30;7976:56;;;8012:18;;:::i;:::-;7976:56;8050:29;8072:6;8050:29;:::i;:::-;8042:37;;8134:4;8128;8124:15;8116:23;;7839:307;;;:::o;8152:154::-;8236:6;8231:3;8226;8213:30;8298:1;8289:6;8284:3;8280:16;8273:27;8152:154;;;:::o;8312:410::-;8389:5;8414:65;8430:48;8471:6;8430:48;:::i;:::-;8414:65;:::i;:::-;8405:74;;8502:6;8495:5;8488:21;8540:4;8533:5;8529:16;8578:3;8569:6;8564:3;8560:16;8557:25;8554:112;;;8585:79;;:::i;:::-;8554:112;8675:41;8709:6;8704:3;8699;8675:41;:::i;:::-;8395:327;8312:410;;;;;:::o;8741:338::-;8796:5;8845:3;8838:4;8830:6;8826:17;8822:27;8812:122;;8853:79;;:::i;:::-;8812:122;8970:6;8957:20;8995:78;9069:3;9061:6;9054:4;9046:6;9042:17;8995:78;:::i;:::-;8986:87;;8802:277;8741:338;;;;:::o;9085:943::-;9180:6;9188;9196;9204;9253:3;9241:9;9232:7;9228:23;9224:33;9221:120;;;9260:79;;:::i;:::-;9221:120;9380:1;9405:53;9450:7;9441:6;9430:9;9426:22;9405:53;:::i;:::-;9395:63;;9351:117;9507:2;9533:53;9578:7;9569:6;9558:9;9554:22;9533:53;:::i;:::-;9523:63;;9478:118;9635:2;9661:53;9706:7;9697:6;9686:9;9682:22;9661:53;:::i;:::-;9651:63;;9606:118;9791:2;9780:9;9776:18;9763:32;9822:18;9814:6;9811:30;9808:117;;;9844:79;;:::i;:::-;9808:117;9949:62;10003:7;9994:6;9983:9;9979:22;9949:62;:::i;:::-;9939:72;;9734:287;9085:943;;;;;;;:::o;10034:474::-;10102:6;10110;10159:2;10147:9;10138:7;10134:23;10130:32;10127:119;;;10165:79;;:::i;:::-;10127:119;10285:1;10310:53;10355:7;10346:6;10335:9;10331:22;10310:53;:::i;:::-;10300:63;;10256:117;10412:2;10438:53;10483:7;10474:6;10463:9;10459:22;10438:53;:::i;:::-;10428:63;;10383:118;10034:474;;;;;:::o;10514:180::-;10562:77;10559:1;10552:88;10659:4;10656:1;10649:15;10683:4;10680:1;10673:15;10700:320;10744:6;10781:1;10775:4;10771:12;10761:22;;10828:1;10822:4;10818:12;10849:18;10839:81;;10905:4;10897:6;10893:17;10883:27;;10839:81;10967:2;10959:6;10956:14;10936:18;10933:38;10930:84;;10986:18;;:::i;:::-;10930:84;10751:269;10700:320;;;:::o;11026:231::-;11166:34;11162:1;11154:6;11150:14;11143:58;11235:14;11230:2;11222:6;11218:15;11211:39;11026:231;:::o;11263:366::-;11405:3;11426:67;11490:2;11485:3;11426:67;:::i;:::-;11419:74;;11502:93;11591:3;11502:93;:::i;:::-;11620:2;11615:3;11611:12;11604:19;;11263:366;;;:::o;11635:419::-;11801:4;11839:2;11828:9;11824:18;11816:26;;11888:9;11882:4;11878:20;11874:1;11863:9;11859:17;11852:47;11916:131;12042:4;11916:131;:::i;:::-;11908:139;;11635:419;;;:::o;12060:220::-;12200:34;12196:1;12188:6;12184:14;12177:58;12269:3;12264:2;12256:6;12252:15;12245:28;12060:220;:::o;12286:366::-;12428:3;12449:67;12513:2;12508:3;12449:67;:::i;:::-;12442:74;;12525:93;12614:3;12525:93;:::i;:::-;12643:2;12638:3;12634:12;12627:19;;12286:366;;;:::o;12658:419::-;12824:4;12862:2;12851:9;12847:18;12839:26;;12911:9;12905:4;12901:20;12897:1;12886:9;12882:17;12875:47;12939:131;13065:4;12939:131;:::i;:::-;12931:139;;12658:419;;;:::o;13083:243::-;13223:34;13219:1;13211:6;13207:14;13200:58;13292:26;13287:2;13279:6;13275:15;13268:51;13083:243;:::o;13332:366::-;13474:3;13495:67;13559:2;13554:3;13495:67;:::i;:::-;13488:74;;13571:93;13660:3;13571:93;:::i;:::-;13689:2;13684:3;13680:12;13673:19;;13332:366;;;:::o;13704:419::-;13870:4;13908:2;13897:9;13893:18;13885:26;;13957:9;13951:4;13947:20;13943:1;13932:9;13928:17;13921:47;13985:131;14111:4;13985:131;:::i;:::-;13977:139;;13704:419;;;:::o;14129:236::-;14269:34;14265:1;14257:6;14253:14;14246:58;14338:19;14333:2;14325:6;14321:15;14314:44;14129:236;:::o;14371:366::-;14513:3;14534:67;14598:2;14593:3;14534:67;:::i;:::-;14527:74;;14610:93;14699:3;14610:93;:::i;:::-;14728:2;14723:3;14719:12;14712:19;;14371:366;;;:::o;14743:419::-;14909:4;14947:2;14936:9;14932:18;14924:26;;14996:9;14990:4;14986:20;14982:1;14971:9;14967:17;14960:47;15024:131;15150:4;15024:131;:::i;:::-;15016:139;;14743:419;;;:::o;15168:230::-;15308:34;15304:1;15296:6;15292:14;15285:58;15377:13;15372:2;15364:6;15360:15;15353:38;15168:230;:::o;15404:366::-;15546:3;15567:67;15631:2;15626:3;15567:67;:::i;:::-;15560:74;;15643:93;15732:3;15643:93;:::i;:::-;15761:2;15756:3;15752:12;15745:19;;15404:366;;;:::o;15776:419::-;15942:4;15980:2;15969:9;15965:18;15957:26;;16029:9;16023:4;16019:20;16015:1;16004:9;16000:17;15993:47;16057:131;16183:4;16057:131;:::i;:::-;16049:139;;15776:419;;;:::o;16201:235::-;16341:34;16337:1;16329:6;16325:14;16318:58;16410:18;16405:2;16397:6;16393:15;16386:43;16201:235;:::o;16442:366::-;16584:3;16605:67;16669:2;16664:3;16605:67;:::i;:::-;16598:74;;16681:93;16770:3;16681:93;:::i;:::-;16799:2;16794:3;16790:12;16783:19;;16442:366;;;:::o;16814:419::-;16980:4;17018:2;17007:9;17003:18;16995:26;;17067:9;17061:4;17057:20;17053:1;17042:9;17038:17;17031:47;17095:131;17221:4;17095:131;:::i;:::-;17087:139;;16814:419;;;:::o;17239:231::-;17379:34;17375:1;17367:6;17363:14;17356:58;17448:14;17443:2;17435:6;17431:15;17424:39;17239:231;:::o;17476:366::-;17618:3;17639:67;17703:2;17698:3;17639:67;:::i;:::-;17632:74;;17715:93;17804:3;17715:93;:::i;:::-;17833:2;17828:3;17824:12;17817:19;;17476:366;;;:::o;17848:419::-;18014:4;18052:2;18041:9;18037:18;18029:26;;18101:9;18095:4;18091:20;18087:1;18076:9;18072:17;18065:47;18129:131;18255:4;18129:131;:::i;:::-;18121:139;;17848:419;;;:::o;18273:180::-;18321:77;18318:1;18311:88;18418:4;18415:1;18408:15;18442:4;18439:1;18432:15;18459:228;18599:34;18595:1;18587:6;18583:14;18576:58;18668:11;18663:2;18655:6;18651:15;18644:36;18459:228;:::o;18693:366::-;18835:3;18856:67;18920:2;18915:3;18856:67;:::i;:::-;18849:74;;18932:93;19021:3;18932:93;:::i;:::-;19050:2;19045:3;19041:12;19034:19;;18693:366;;;:::o;19065:419::-;19231:4;19269:2;19258:9;19254:18;19246:26;;19318:9;19312:4;19308:20;19304:1;19293:9;19289:17;19282:47;19346:131;19472:4;19346:131;:::i;:::-;19338:139;;19065:419;;;:::o;19490:229::-;19630:34;19626:1;19618:6;19614:14;19607:58;19699:12;19694:2;19686:6;19682:15;19675:37;19490:229;:::o;19725:366::-;19867:3;19888:67;19952:2;19947:3;19888:67;:::i;:::-;19881:74;;19964:93;20053:3;19964:93;:::i;:::-;20082:2;20077:3;20073:12;20066:19;;19725:366;;;:::o;20097:419::-;20263:4;20301:2;20290:9;20286:18;20278:26;;20350:9;20344:4;20340:20;20336:1;20325:9;20321:17;20314:47;20378:131;20504:4;20378:131;:::i;:::-;20370:139;;20097:419;;;:::o;20522:182::-;20662:34;20658:1;20650:6;20646:14;20639:58;20522:182;:::o;20710:366::-;20852:3;20873:67;20937:2;20932:3;20873:67;:::i;:::-;20866:74;;20949:93;21038:3;20949:93;:::i;:::-;21067:2;21062:3;21058:12;21051:19;;20710:366;;;:::o;21082:419::-;21248:4;21286:2;21275:9;21271:18;21263:26;;21335:9;21329:4;21325:20;21321:1;21310:9;21306:17;21299:47;21363:131;21489:4;21363:131;:::i;:::-;21355:139;;21082:419;;;:::o;21507:234::-;21647:34;21643:1;21635:6;21631:14;21624:58;21716:17;21711:2;21703:6;21699:15;21692:42;21507:234;:::o;21747:366::-;21889:3;21910:67;21974:2;21969:3;21910:67;:::i;:::-;21903:74;;21986:93;22075:3;21986:93;:::i;:::-;22104:2;22099:3;22095:12;22088:19;;21747:366;;;:::o;22119:419::-;22285:4;22323:2;22312:9;22308:18;22300:26;;22372:9;22366:4;22362:20;22358:1;22347:9;22343:17;22336:47;22400:131;22526:4;22400:131;:::i;:::-;22392:139;;22119:419;;;:::o;22544:148::-;22646:11;22683:3;22668:18;;22544:148;;;;:::o;22698:377::-;22804:3;22832:39;22865:5;22832:39;:::i;:::-;22887:89;22969:6;22964:3;22887:89;:::i;:::-;22880:96;;22985:52;23030:6;23025:3;23018:4;23011:5;23007:16;22985:52;:::i;:::-;23062:6;23057:3;23053:16;23046:23;;22808:267;22698:377;;;;:::o;23081:435::-;23261:3;23283:95;23374:3;23365:6;23283:95;:::i;:::-;23276:102;;23395:95;23486:3;23477:6;23395:95;:::i;:::-;23388:102;;23507:3;23500:10;;23081:435;;;;;:::o;23522:225::-;23662:34;23658:1;23650:6;23646:14;23639:58;23731:8;23726:2;23718:6;23714:15;23707:33;23522:225;:::o;23753:366::-;23895:3;23916:67;23980:2;23975:3;23916:67;:::i;:::-;23909:74;;23992:93;24081:3;23992:93;:::i;:::-;24110:2;24105:3;24101:12;24094:19;;23753:366;;;:::o;24125:419::-;24291:4;24329:2;24318:9;24314:18;24306:26;;24378:9;24372:4;24368:20;24364:1;24353:9;24349:17;24342:47;24406:131;24532:4;24406:131;:::i;:::-;24398:139;;24125:419;;;:::o;24550:231::-;24690:34;24686:1;24678:6;24674:14;24667:58;24759:14;24754:2;24746:6;24742:15;24735:39;24550:231;:::o;24787:366::-;24929:3;24950:67;25014:2;25009:3;24950:67;:::i;:::-;24943:74;;25026:93;25115:3;25026:93;:::i;:::-;25144:2;25139:3;25135:12;25128:19;;24787:366;;;:::o;25159:419::-;25325:4;25363:2;25352:9;25348:18;25340:26;;25412:9;25406:4;25402:20;25398:1;25387:9;25383:17;25376:47;25440:131;25566:4;25440:131;:::i;:::-;25432:139;;25159:419;;;:::o;25584:224::-;25724:34;25720:1;25712:6;25708:14;25701:58;25793:7;25788:2;25780:6;25776:15;25769:32;25584:224;:::o;25814:366::-;25956:3;25977:67;26041:2;26036:3;25977:67;:::i;:::-;25970:74;;26053:93;26142:3;26053:93;:::i;:::-;26171:2;26166:3;26162:12;26155:19;;25814:366;;;:::o;26186:419::-;26352:4;26390:2;26379:9;26375:18;26367:26;;26439:9;26433:4;26429:20;26425:1;26414:9;26410:17;26403:47;26467:131;26593:4;26467:131;:::i;:::-;26459:139;;26186:419;;;:::o;26611:223::-;26751:34;26747:1;26739:6;26735:14;26728:58;26820:6;26815:2;26807:6;26803:15;26796:31;26611:223;:::o;26840:366::-;26982:3;27003:67;27067:2;27062:3;27003:67;:::i;:::-;26996:74;;27079:93;27168:3;27079:93;:::i;:::-;27197:2;27192:3;27188:12;27181:19;;26840:366;;;:::o;27212:419::-;27378:4;27416:2;27405:9;27401:18;27393:26;;27465:9;27459:4;27455:20;27451:1;27440:9;27436:17;27429:47;27493:131;27619:4;27493:131;:::i;:::-;27485:139;;27212:419;;;:::o;27637:180::-;27685:77;27682:1;27675:88;27782:4;27779:1;27772:15;27806:4;27803:1;27796:15;27823:191;27863:4;27883:20;27901:1;27883:20;:::i;:::-;27878:25;;27917:20;27935:1;27917:20;:::i;:::-;27912:25;;27956:1;27953;27950:8;27947:34;;;27961:18;;:::i;:::-;27947:34;28006:1;28003;27999:9;27991:17;;27823:191;;;;:::o;28020:305::-;28060:3;28079:20;28097:1;28079:20;:::i;:::-;28074:25;;28113:20;28131:1;28113:20;:::i;:::-;28108:25;;28267:1;28199:66;28195:74;28192:1;28189:81;28186:107;;;28273:18;;:::i;:::-;28186:107;28317:1;28314;28310:9;28303:16;;28020:305;;;;:::o;28331:175::-;28471:27;28467:1;28459:6;28455:14;28448:51;28331:175;:::o;28512:366::-;28654:3;28675:67;28739:2;28734:3;28675:67;:::i;:::-;28668:74;;28751:93;28840:3;28751:93;:::i;:::-;28869:2;28864:3;28860:12;28853:19;;28512:366;;;:::o;28884:419::-;29050:4;29088:2;29077:9;29073:18;29065:26;;29137:9;29131:4;29127:20;29123:1;29112:9;29108:17;29101:47;29165:131;29291:4;29165:131;:::i;:::-;29157:139;;28884:419;;;:::o;29309:237::-;29449:34;29445:1;29437:6;29433:14;29426:58;29518:20;29513:2;29505:6;29501:15;29494:45;29309:237;:::o;29552:366::-;29694:3;29715:67;29779:2;29774:3;29715:67;:::i;:::-;29708:74;;29791:93;29880:3;29791:93;:::i;:::-;29909:2;29904:3;29900:12;29893:19;;29552:366;;;:::o;29924:419::-;30090:4;30128:2;30117:9;30113:18;30105:26;;30177:9;30171:4;30167:20;30163:1;30152:9;30148:17;30141:47;30205:131;30331:4;30205:131;:::i;:::-;30197:139;;29924:419;;;:::o;30349:233::-;30388:3;30411:24;30429:5;30411:24;:::i;:::-;30402:33;;30457:66;30450:5;30447:77;30444:103;;30527:18;;:::i;:::-;30444:103;30574:1;30567:5;30563:13;30556:20;;30349:233;;;:::o;30588:180::-;30636:77;30633:1;30626:88;30733:4;30730:1;30723:15;30757:4;30754:1;30747:15;30774:185;30814:1;30831:20;30849:1;30831:20;:::i;:::-;30826:25;;30865:20;30883:1;30865:20;:::i;:::-;30860:25;;30904:1;30894:35;;30909:18;;:::i;:::-;30894:35;30951:1;30948;30944:9;30939:14;;30774:185;;;;:::o;30965:176::-;30997:1;31014:20;31032:1;31014:20;:::i;:::-;31009:25;;31048:20;31066:1;31048:20;:::i;:::-;31043:25;;31087:1;31077:35;;31092:18;;:::i;:::-;31077:35;31133:1;31130;31126:9;31121:14;;30965:176;;;;:::o;31147:98::-;31198:6;31232:5;31226:12;31216:22;;31147:98;;;:::o;31251:168::-;31334:11;31368:6;31363:3;31356:19;31408:4;31403:3;31399:14;31384:29;;31251:168;;;;:::o;31425:360::-;31511:3;31539:38;31571:5;31539:38;:::i;:::-;31593:70;31656:6;31651:3;31593:70;:::i;:::-;31586:77;;31672:52;31717:6;31712:3;31705:4;31698:5;31694:16;31672:52;:::i;:::-;31749:29;31771:6;31749:29;:::i;:::-;31744:3;31740:39;31733:46;;31515:270;31425:360;;;;:::o;31791:640::-;31986:4;32024:3;32013:9;32009:19;32001:27;;32038:71;32106:1;32095:9;32091:17;32082:6;32038:71;:::i;:::-;32119:72;32187:2;32176:9;32172:18;32163:6;32119:72;:::i;:::-;32201;32269:2;32258:9;32254:18;32245:6;32201:72;:::i;:::-;32320:9;32314:4;32310:20;32305:2;32294:9;32290:18;32283:48;32348:76;32419:4;32410:6;32348:76;:::i;:::-;32340:84;;31791:640;;;;;;;:::o;32437:141::-;32493:5;32524:6;32518:13;32509:22;;32540:32;32566:5;32540:32;:::i;:::-;32437:141;;;;:::o;32584:349::-;32653:6;32702:2;32690:9;32681:7;32677:23;32673:32;32670:119;;;32708:79;;:::i;:::-;32670:119;32828:1;32853:63;32908:7;32899:6;32888:9;32884:22;32853:63;:::i;:::-;32843:73;;32799:127;32584:349;;;;:::o;32939:182::-;33079:34;33075:1;33067:6;33063:14;33056:58;32939:182;:::o;33127:366::-;33269:3;33290:67;33354:2;33349:3;33290:67;:::i;:::-;33283:74;;33366:93;33455:3;33366:93;:::i;:::-;33484:2;33479:3;33475:12;33468:19;;33127:366;;;:::o;33499:419::-;33665:4;33703:2;33692:9;33688:18;33680:26;;33752:9;33746:4;33742:20;33738:1;33727:9;33723:17;33716:47;33780:131;33906:4;33780:131;:::i;:::-;33772:139;;33499:419;;;:::o;33924:178::-;34064:30;34060:1;34052:6;34048:14;34041:54;33924:178;:::o;34108:366::-;34250:3;34271:67;34335:2;34330:3;34271:67;:::i;:::-;34264:74;;34347:93;34436:3;34347:93;:::i;:::-;34465:2;34460:3;34456:12;34449:19;;34108:366;;;:::o;34480:419::-;34646:4;34684:2;34673:9;34669:18;34661:26;;34733:9;34727:4;34723:20;34719:1;34708:9;34704:17;34697:47;34761:131;34887:4;34761:131;:::i;:::-;34753:139;;34480:419;;;:::o;34905:180::-;34953:77;34950:1;34943:88;35050:4;35047:1;35040:15;35074:4;35071:1;35064:15
Swarm Source
ipfs://a4e514933bf7ecdc49808bc5505bbef9674848ac622aed5dba7fae840ee4018c
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.