Contract Overview
Balance:
0 MATIC
MATIC Value:
$0.00
[ Download CSV Export ]
Contract Name:
LilRuggy
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2022-11-12 */ /* _ _ _ | | (_) | | | _| | | | | | | | |____| | | |______|_|_| _ | __ \ | | | |__) | _ __ _ __ _ _ _| | | _ / | | |/ _` |/ _` | | | | | | | \ \ |_| | (_| | (_| | |_| |_| |_| \_\__,_|\__, |\__, |\__, (_) __/ | __/ | __/ | |___/ |___/ |___/ */ // 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/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/TheRug.sol pragma solidity >=0.7.0 <0.9.0; contract LilRuggy is ERC721Enumerable, Ownable { using Strings for uint256; string baseURI; uint256 public maxSupply = 389; constructor( ) ERC721("Lil Ruggy", "LRUG") { setBaseURI("https://pub-gmn.com/FranksNFT/frank.json"); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _mintTo, uint256 _mintAmount) public payable onlyOwner { uint256 supply = totalSupply(); require(_mintAmount > 0); require(supply + _mintAmount <= maxSupply, "Max supply exceeded!"); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_mintTo, supply + i); } } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI)) : ""; } //only owner function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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":"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_mintTo","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052610185600c553480156200001757600080fd5b506040518060400160405280600981526020017f4c696c20527567677900000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4c5255470000000000000000000000000000000000000000000000000000000081525081600090805190602001906200009c929190620002ab565b508060019080519060200190620000b5929190620002ab565b505050620000d8620000cc6200010860201b60201c565b6200011060201b60201c565b6200010260405180606001604052806028815260200162003beb60289139620001d660201b60201c565b62000443565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001e66200010860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200020c6200028160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000265576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025c9062000382565b60405180910390fd5b80600b90805190602001906200027d929190620002ab565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002b990620003b5565b90600052602060002090601f016020900481019282620002dd576000855562000329565b82601f10620002f857805160ff191683800117855562000329565b8280016001018555821562000329579182015b82811115620003285782518255916020019190600101906200030b565b5b5090506200033891906200033c565b5090565b5b80821115620003575760008160009055506001016200033d565b5090565b60006200036a602083620003a4565b915062000377826200041a565b602082019050919050565b600060208201905081810360008301526200039d816200035b565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620003ce57607f821691505b60208210811415620003e557620003e4620003eb565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b61379880620004536000396000f3fe6080604052600436106101405760003560e01c806355f804b3116100b6578063a22cb4651161006f578063a22cb46514610440578063b88d4fde14610469578063c87b56dd14610492578063d5abeb01146104cf578063e985e9c5146104fa578063f2fde38b1461053757610140565b806355f804b3146103305780636352211e1461035957806370a0823114610396578063715018a6146103d35780638da5cb5b146103ea57806395d89b411461041557610140565b806323b872dd1161010857806323b872dd1461023e5780632f745c59146102675780633ccfd60b146102a457806340c10f19146102ae57806342842e0e146102ca5780634f6ccce7146102f357610140565b806301ffc9a71461014557806306fdde0314610182578063081812fc146101ad578063095ea7b3146101ea57806318160ddd14610213575b600080fd5b34801561015157600080fd5b5061016c6004803603810190610167919061266c565b610560565b6040516101799190612b5b565b60405180910390f35b34801561018e57600080fd5b506101976105da565b6040516101a49190612b76565b60405180910390f35b3480156101b957600080fd5b506101d460048036038101906101cf919061270f565b61066c565b6040516101e19190612af4565b60405180910390f35b3480156101f657600080fd5b50610211600480360381019061020c919061262c565b6106f1565b005b34801561021f57600080fd5b50610228610809565b6040516102359190612df8565b60405180910390f35b34801561024a57600080fd5b5061026560048036038101906102609190612516565b610816565b005b34801561027357600080fd5b5061028e6004803603810190610289919061262c565b610876565b60405161029b9190612df8565b60405180910390f35b6102ac61091b565b005b6102c860048036038101906102c3919061262c565b610a10565b005b3480156102d657600080fd5b506102f160048036038101906102ec9190612516565b610b31565b005b3480156102ff57600080fd5b5061031a6004803603810190610315919061270f565b610b51565b6040516103279190612df8565b60405180910390f35b34801561033c57600080fd5b50610357600480360381019061035291906126c6565b610bc2565b005b34801561036557600080fd5b50610380600480360381019061037b919061270f565b610c58565b60405161038d9190612af4565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b891906124a9565b610d0a565b6040516103ca9190612df8565b60405180910390f35b3480156103df57600080fd5b506103e8610dc2565b005b3480156103f657600080fd5b506103ff610e4a565b60405161040c9190612af4565b60405180910390f35b34801561042157600080fd5b5061042a610e74565b6040516104379190612b76565b60405180910390f35b34801561044c57600080fd5b50610467600480360381019061046291906125ec565b610f06565b005b34801561047557600080fd5b50610490600480360381019061048b9190612569565b610f1c565b005b34801561049e57600080fd5b506104b960048036038101906104b4919061270f565b610f7e565b6040516104c69190612b76565b60405180910390f35b3480156104db57600080fd5b506104e461101b565b6040516104f19190612df8565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c91906124d6565b611021565b60405161052e9190612b5b565b60405180910390f35b34801561054357600080fd5b5061055e600480360381019061055991906124a9565b6110b5565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105d357506105d2826111ad565b5b9050919050565b6060600080546105e990613028565b80601f016020809104026020016040519081016040528092919081815260200182805461061590613028565b80156106625780601f1061063757610100808354040283529160200191610662565b820191906000526020600020905b81548152906001019060200180831161064557829003601f168201915b5050505050905090565b60006106778261128f565b6106b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ad90612d18565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106fc82610c58565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561076d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076490612d78565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661078c6112fb565b73ffffffffffffffffffffffffffffffffffffffff1614806107bb57506107ba816107b56112fb565b611021565b5b6107fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f190612c98565b60405180910390fd5b6108048383611303565b505050565b6000600880549050905090565b6108276108216112fb565b826113bc565b610866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085d90612db8565b60405180910390fd5b61087183838361149a565b505050565b600061088183610d0a565b82106108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b990612b98565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6109236112fb565b73ffffffffffffffffffffffffffffffffffffffff16610941610e4a565b73ffffffffffffffffffffffffffffffffffffffff1614610997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098e90612d38565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516109bd90612adf565b60006040518083038185875af1925050503d80600081146109fa576040519150601f19603f3d011682016040523d82523d6000602084013e6109ff565b606091505b5050905080610a0d57600080fd5b50565b610a186112fb565b73ffffffffffffffffffffffffffffffffffffffff16610a36610e4a565b73ffffffffffffffffffffffffffffffffffffffff1614610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8390612d38565b60405180910390fd5b6000610a96610809565b905060008211610aa557600080fd5b600c548282610ab49190612ee8565b1115610af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aec90612d98565b60405180910390fd5b6000600190505b828111610b2b57610b18848284610b139190612ee8565b611701565b8080610b239061308b565b915050610afc565b50505050565b610b4c83838360405180602001604052806000815250610f1c565b505050565b6000610b5b610809565b8210610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390612dd8565b60405180910390fd5b60088281548110610bb057610baf613161565b5b90600052602060002001549050919050565b610bca6112fb565b73ffffffffffffffffffffffffffffffffffffffff16610be8610e4a565b73ffffffffffffffffffffffffffffffffffffffff1614610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3590612d38565b60405180910390fd5b80600b9080519060200190610c549291906122bd565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890612cd8565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7290612cb8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dca6112fb565b73ffffffffffffffffffffffffffffffffffffffff16610de8610e4a565b73ffffffffffffffffffffffffffffffffffffffff1614610e3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3590612d38565b60405180910390fd5b610e48600061171f565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e8390613028565b80601f0160208091040260200160405190810160405280929190818152602001828054610eaf90613028565b8015610efc5780601f10610ed157610100808354040283529160200191610efc565b820191906000526020600020905b815481529060010190602001808311610edf57829003601f168201915b5050505050905090565b610f18610f116112fb565b83836117e5565b5050565b610f2d610f276112fb565b836113bc565b610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6390612db8565b60405180910390fd5b610f7884848484611952565b50505050565b6060610f898261128f565b610fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbf90612d58565b60405180910390fd5b6000610fd26119ae565b90506000815111610ff25760405180602001604052806000815250611013565b806040516020016110039190612ac8565b6040516020818303038152906040525b915050919050565b600c5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6110bd6112fb565b73ffffffffffffffffffffffffffffffffffffffff166110db610e4a565b73ffffffffffffffffffffffffffffffffffffffff1614611131576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112890612d38565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119890612bd8565b60405180910390fd5b6111aa8161171f565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061127857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611288575061128782611a40565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661137683610c58565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006113c78261128f565b611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90612c78565b60405180910390fd5b600061141183610c58565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061145357506114528185611021565b5b8061149157508373ffffffffffffffffffffffffffffffffffffffff166114798461066c565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166114ba82610c58565b73ffffffffffffffffffffffffffffffffffffffff1614611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790612bf8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790612c38565b60405180910390fd5b61158b838383611aaa565b611596600082611303565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115e69190612f3e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461163d9190612ee8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46116fc838383611bbe565b505050565b61171b828260405180602001604052806000815250611bc3565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90612c58565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119459190612b5b565b60405180910390a3505050565b61195d84848461149a565b61196984848484611c1e565b6119a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199f90612bb8565b60405180910390fd5b50505050565b6060600b80546119bd90613028565b80601f01602080910402602001604051908101604052809291908181526020018280546119e990613028565b8015611a365780601f10611a0b57610100808354040283529160200191611a36565b820191906000526020600020905b815481529060010190602001808311611a1957829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611ab5838383611db5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611af857611af381611dba565b611b37565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611b3657611b358382611e03565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b7a57611b7581611f70565b611bb9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611bb857611bb78282612041565b5b5b505050565b505050565b611bcd83836120c0565b611bda6000848484611c1e565b611c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1090612bb8565b60405180910390fd5b505050565b6000611c3f8473ffffffffffffffffffffffffffffffffffffffff1661229a565b15611da8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611c686112fb565b8786866040518563ffffffff1660e01b8152600401611c8a9493929190612b0f565b602060405180830381600087803b158015611ca457600080fd5b505af1925050508015611cd557506040513d601f19601f82011682018060405250810190611cd29190612699565b60015b611d58573d8060008114611d05576040519150601f19603f3d011682016040523d82523d6000602084013e611d0a565b606091505b50600081511415611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4790612bb8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611dad565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611e1084610d0a565b611e1a9190612f3e565b9050600060076000848152602001908152602001600020549050818114611eff576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050611f849190612f3e565b9050600060096000848152602001908152602001600020549050600060088381548110611fb457611fb3613161565b5b906000526020600020015490508060088381548110611fd657611fd5613161565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061202557612024613132565b5b6001900381819060005260206000200160009055905550505050565b600061204c83610d0a565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212790612cf8565b60405180910390fd5b6121398161128f565b15612179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217090612c18565b60405180910390fd5b61218560008383611aaa565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121d59190612ee8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461229660008383611bbe565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546122c990613028565b90600052602060002090601f0160209004810192826122eb5760008555612332565b82601f1061230457805160ff1916838001178555612332565b82800160010185558215612332579182015b82811115612331578251825591602001919060010190612316565b5b50905061233f9190612343565b5090565b5b8082111561235c576000816000905550600101612344565b5090565b600061237361236e84612e38565b612e13565b90508281526020810184848401111561238f5761238e6131c4565b5b61239a848285612fe6565b509392505050565b60006123b56123b084612e69565b612e13565b9050828152602081018484840111156123d1576123d06131c4565b5b6123dc848285612fe6565b509392505050565b6000813590506123f381613706565b92915050565b6000813590506124088161371d565b92915050565b60008135905061241d81613734565b92915050565b60008151905061243281613734565b92915050565b600082601f83011261244d5761244c6131bf565b5b813561245d848260208601612360565b91505092915050565b600082601f83011261247b5761247a6131bf565b5b813561248b8482602086016123a2565b91505092915050565b6000813590506124a38161374b565b92915050565b6000602082840312156124bf576124be6131ce565b5b60006124cd848285016123e4565b91505092915050565b600080604083850312156124ed576124ec6131ce565b5b60006124fb858286016123e4565b925050602061250c858286016123e4565b9150509250929050565b60008060006060848603121561252f5761252e6131ce565b5b600061253d868287016123e4565b935050602061254e868287016123e4565b925050604061255f86828701612494565b9150509250925092565b60008060008060808587031215612583576125826131ce565b5b6000612591878288016123e4565b94505060206125a2878288016123e4565b93505060406125b387828801612494565b925050606085013567ffffffffffffffff8111156125d4576125d36131c9565b5b6125e087828801612438565b91505092959194509250565b60008060408385031215612603576126026131ce565b5b6000612611858286016123e4565b9250506020612622858286016123f9565b9150509250929050565b60008060408385031215612643576126426131ce565b5b6000612651858286016123e4565b925050602061266285828601612494565b9150509250929050565b600060208284031215612682576126816131ce565b5b60006126908482850161240e565b91505092915050565b6000602082840312156126af576126ae6131ce565b5b60006126bd84828501612423565b91505092915050565b6000602082840312156126dc576126db6131ce565b5b600082013567ffffffffffffffff8111156126fa576126f96131c9565b5b61270684828501612466565b91505092915050565b600060208284031215612725576127246131ce565b5b600061273384828501612494565b91505092915050565b61274581612f72565b82525050565b61275481612f84565b82525050565b600061276582612e9a565b61276f8185612eb0565b935061277f818560208601612ff5565b612788816131d3565b840191505092915050565b600061279e82612ea5565b6127a88185612ecc565b93506127b8818560208601612ff5565b6127c1816131d3565b840191505092915050565b60006127d782612ea5565b6127e18185612edd565b93506127f1818560208601612ff5565b80840191505092915050565b600061280a602b83612ecc565b9150612815826131e4565b604082019050919050565b600061282d603283612ecc565b915061283882613233565b604082019050919050565b6000612850602683612ecc565b915061285b82613282565b604082019050919050565b6000612873602583612ecc565b915061287e826132d1565b604082019050919050565b6000612896601c83612ecc565b91506128a182613320565b602082019050919050565b60006128b9602483612ecc565b91506128c482613349565b604082019050919050565b60006128dc601983612ecc565b91506128e782613398565b602082019050919050565b60006128ff602c83612ecc565b915061290a826133c1565b604082019050919050565b6000612922603883612ecc565b915061292d82613410565b604082019050919050565b6000612945602a83612ecc565b91506129508261345f565b604082019050919050565b6000612968602983612ecc565b9150612973826134ae565b604082019050919050565b600061298b602083612ecc565b9150612996826134fd565b602082019050919050565b60006129ae602c83612ecc565b91506129b982613526565b604082019050919050565b60006129d1602083612ecc565b91506129dc82613575565b602082019050919050565b60006129f4602f83612ecc565b91506129ff8261359e565b604082019050919050565b6000612a17602183612ecc565b9150612a22826135ed565b604082019050919050565b6000612a3a600083612ec1565b9150612a458261363c565b600082019050919050565b6000612a5d601483612ecc565b9150612a688261363f565b602082019050919050565b6000612a80603183612ecc565b9150612a8b82613668565b604082019050919050565b6000612aa3602c83612ecc565b9150612aae826136b7565b604082019050919050565b612ac281612fdc565b82525050565b6000612ad482846127cc565b915081905092915050565b6000612aea82612a2d565b9150819050919050565b6000602082019050612b09600083018461273c565b92915050565b6000608082019050612b24600083018761273c565b612b31602083018661273c565b612b3e6040830185612ab9565b8181036060830152612b50818461275a565b905095945050505050565b6000602082019050612b70600083018461274b565b92915050565b60006020820190508181036000830152612b908184612793565b905092915050565b60006020820190508181036000830152612bb1816127fd565b9050919050565b60006020820190508181036000830152612bd181612820565b9050919050565b60006020820190508181036000830152612bf181612843565b9050919050565b60006020820190508181036000830152612c1181612866565b9050919050565b60006020820190508181036000830152612c3181612889565b9050919050565b60006020820190508181036000830152612c51816128ac565b9050919050565b60006020820190508181036000830152612c71816128cf565b9050919050565b60006020820190508181036000830152612c91816128f2565b9050919050565b60006020820190508181036000830152612cb181612915565b9050919050565b60006020820190508181036000830152612cd181612938565b9050919050565b60006020820190508181036000830152612cf18161295b565b9050919050565b60006020820190508181036000830152612d118161297e565b9050919050565b60006020820190508181036000830152612d31816129a1565b9050919050565b60006020820190508181036000830152612d51816129c4565b9050919050565b60006020820190508181036000830152612d71816129e7565b9050919050565b60006020820190508181036000830152612d9181612a0a565b9050919050565b60006020820190508181036000830152612db181612a50565b9050919050565b60006020820190508181036000830152612dd181612a73565b9050919050565b60006020820190508181036000830152612df181612a96565b9050919050565b6000602082019050612e0d6000830184612ab9565b92915050565b6000612e1d612e2e565b9050612e29828261305a565b919050565b6000604051905090565b600067ffffffffffffffff821115612e5357612e52613190565b5b612e5c826131d3565b9050602081019050919050565b600067ffffffffffffffff821115612e8457612e83613190565b5b612e8d826131d3565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000612ef382612fdc565b9150612efe83612fdc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f3357612f326130d4565b5b828201905092915050565b6000612f4982612fdc565b9150612f5483612fdc565b925082821015612f6757612f666130d4565b5b828203905092915050565b6000612f7d82612fbc565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613013578082015181840152602081019050612ff8565b83811115613022576000848401525b50505050565b6000600282049050600182168061304057607f821691505b6020821081141561305457613053613103565b5b50919050565b613063826131d3565b810181811067ffffffffffffffff8211171561308257613081613190565b5b80604052505050565b600061309682612fdc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156130c9576130c86130d4565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61370f81612f72565b811461371a57600080fd5b50565b61372681612f84565b811461373157600080fd5b50565b61373d81612f90565b811461374857600080fd5b50565b61375481612fdc565b811461375f57600080fd5b5056fea26469706673582212206da6c1e1ca1f24bc0c0c78356f549b5a5b6c0e1f44f0b64b9411b5afd20442b964736f6c6343000807003368747470733a2f2f7075622d676d6e2e636f6d2f4672616e6b734e46542f6672616e6b2e6a736f6e
Deployed ByteCode Sourcemap
46066:1401:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39842:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26661:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28221:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27744:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40482:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28971:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40150:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47306:158;;;:::i;:::-;;46461:322;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29381:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40672:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47201:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26355:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26085:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5219:103;;;;;;;;;;;;;:::i;:::-;;4568:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26830:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28514:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29637:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46789:388;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46169:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28740:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5477:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39842:224;39944:4;39983:35;39968:50;;;:11;:50;;;;:90;;;;40022:36;40046:11;40022:23;:36::i;:::-;39968:90;39961:97;;39842:224;;;:::o;26661:100::-;26715:13;26748:5;26741:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26661:100;:::o;28221:221::-;28297:7;28325:16;28333:7;28325;:16::i;:::-;28317:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28410:15;:24;28426:7;28410:24;;;;;;;;;;;;;;;;;;;;;28403:31;;28221:221;;;:::o;27744:411::-;27825:13;27841:23;27856:7;27841:14;:23::i;:::-;27825:39;;27889:5;27883:11;;:2;:11;;;;27875:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27983:5;27967:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27992:37;28009:5;28016:12;:10;:12::i;:::-;27992:16;:37::i;:::-;27967:62;27945:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28126:21;28135:2;28139:7;28126:8;:21::i;:::-;27814:341;27744:411;;:::o;40482:113::-;40543:7;40570:10;:17;;;;40563:24;;40482:113;:::o;28971:339::-;29166:41;29185:12;:10;:12::i;:::-;29199:7;29166:18;:41::i;:::-;29158:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29274:28;29284:4;29290:2;29294:7;29274:9;:28::i;:::-;28971:339;;;:::o;40150:256::-;40247:7;40283:23;40300:5;40283:16;:23::i;:::-;40275:5;:31;40267:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40372:12;:19;40385:5;40372:19;;;;;;;;;;;;;;;:26;40392:5;40372:26;;;;;;;;;;;;40365:33;;40150:256;;;;:::o;47306:158::-;4799:12;:10;:12::i;:::-;4788:23;;:7;:5;:7::i;:::-;:23;;;4780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47359:12:::1;47385:10;47377:24;;47409:21;47377:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47358:77;;;47450:7;47442:16;;;::::0;::::1;;47351:113;47306:158::o:0;46461:322::-;4799:12;:10;:12::i;:::-;4788:23;;:7;:5;:7::i;:::-;:23;;;4780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46545:14:::1;46562:13;:11;:13::i;:::-;46545:30;;46604:1;46590:11;:15;46582:24;;;::::0;::::1;;46645:9;;46630:11;46621:6;:20;;;;:::i;:::-;:33;;46613:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;46693:9;46705:1;46693:13;;46688:90;46713:11;46708:1;:16;46688:90;;46740:30;46750:7;46768:1;46759:6;:10;;;;:::i;:::-;46740:9;:30::i;:::-;46726:3;;;;;:::i;:::-;;;;46688:90;;;;46538:245;46461:322:::0;;:::o;29381:185::-;29519:39;29536:4;29542:2;29546:7;29519:39;;;;;;;;;;;;:16;:39::i;:::-;29381:185;;;:::o;40672:233::-;40747:7;40783:30;:28;:30::i;:::-;40775:5;:38;40767:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40880:10;40891:5;40880:17;;;;;;;;:::i;:::-;;;;;;;;;;40873:24;;40672:233;;;:::o;47201:98::-;4799:12;:10;:12::i;:::-;4788:23;;:7;:5;:7::i;:::-;:23;;;4780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47282:11:::1;47272:7;:21;;;;;;;;;;;;:::i;:::-;;47201:98:::0;:::o;26355:239::-;26427:7;26447:13;26463:7;:16;26471:7;26463:16;;;;;;;;;;;;;;;;;;;;;26447:32;;26515:1;26498:19;;:5;:19;;;;26490:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26581:5;26574:12;;;26355:239;;;:::o;26085:208::-;26157:7;26202:1;26185:19;;:5;:19;;;;26177:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26269:9;:16;26279:5;26269:16;;;;;;;;;;;;;;;;26262:23;;26085:208;;;:::o;5219:103::-;4799:12;:10;:12::i;:::-;4788:23;;:7;:5;:7::i;:::-;:23;;;4780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5284:30:::1;5311:1;5284:18;:30::i;:::-;5219:103::o:0;4568:87::-;4614:7;4641:6;;;;;;;;;;;4634:13;;4568:87;:::o;26830:104::-;26886:13;26919:7;26912:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26830:104;:::o;28514:155::-;28609:52;28628:12;:10;:12::i;:::-;28642:8;28652;28609:18;:52::i;:::-;28514:155;;:::o;29637:328::-;29812:41;29831:12;:10;:12::i;:::-;29845:7;29812:18;:41::i;:::-;29804:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29918:39;29932:4;29938:2;29942:7;29951:5;29918:13;:39::i;:::-;29637:328;;;;:::o;46789:388::-;46887:13;46928:16;46936:7;46928;:16::i;:::-;46912:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;47018:28;47049:10;:8;:10::i;:::-;47018:41;;47104:1;47079:14;47073:28;:32;:98;;;;;;;;;;;;;;;;;47141:14;47124:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;47073:98;47066:105;;;46789:388;;;:::o;46169:30::-;;;;:::o;28740:164::-;28837:4;28861:18;:25;28880:5;28861:25;;;;;;;;;;;;;;;:35;28887:8;28861:35;;;;;;;;;;;;;;;;;;;;;;;;;28854:42;;28740:164;;;;:::o;5477:201::-;4799:12;:10;:12::i;:::-;4788:23;;:7;:5;:7::i;:::-;:23;;;4780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5586:1:::1;5566:22;;:8;:22;;;;5558:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5642:28;5661:8;5642:18;:28::i;:::-;5477:201:::0;:::o;25716:305::-;25818:4;25870:25;25855:40;;;:11;:40;;;;:105;;;;25927:33;25912:48;;;:11;:48;;;;25855:105;:158;;;;25977:36;26001:11;25977:23;:36::i;:::-;25855:158;25835:178;;25716:305;;;:::o;31475:127::-;31540:4;31592:1;31564:30;;:7;:16;31572:7;31564:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31557:37;;31475:127;;;:::o;3292:98::-;3345:7;3372:10;3365:17;;3292:98;:::o;35621:174::-;35723:2;35696:15;:24;35712:7;35696:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35779:7;35775:2;35741:46;;35750:23;35765:7;35750:14;:23::i;:::-;35741:46;;;;;;;;;;;;35621:174;;:::o;31769:348::-;31862:4;31887:16;31895:7;31887;:16::i;:::-;31879:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31963:13;31979:23;31994:7;31979:14;:23::i;:::-;31963:39;;32032:5;32021:16;;:7;:16;;;:52;;;;32041:32;32058:5;32065:7;32041:16;:32::i;:::-;32021:52;:87;;;;32101:7;32077:31;;:20;32089:7;32077:11;:20::i;:::-;:31;;;32021:87;32013:96;;;31769:348;;;;:::o;34878:625::-;35037:4;35010:31;;:23;35025:7;35010:14;:23::i;:::-;:31;;;35002:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35116:1;35102:16;;:2;:16;;;;35094:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35172:39;35193:4;35199:2;35203:7;35172:20;:39::i;:::-;35276:29;35293:1;35297:7;35276:8;:29::i;:::-;35337:1;35318:9;:15;35328:4;35318:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35366:1;35349:9;:13;35359:2;35349:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35397:2;35378:7;:16;35386:7;35378:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35436:7;35432:2;35417:27;;35426:4;35417:27;;;;;;;;;;;;35457:38;35477:4;35483:2;35487:7;35457:19;:38::i;:::-;34878:625;;;:::o;32459:110::-;32535:26;32545:2;32549:7;32535:26;;;;;;;;;;;;:9;:26::i;:::-;32459:110;;:::o;5838:191::-;5912:16;5931:6;;;;;;;;;;;5912:25;;5957:8;5948:6;;:17;;;;;;;;;;;;;;;;;;6012:8;5981:40;;6002:8;5981:40;;;;;;;;;;;;5901:128;5838:191;:::o;35937:315::-;36092:8;36083:17;;:5;:17;;;;36075:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36179:8;36141:18;:25;36160:5;36141:25;;;;;;;;;;;;;;;:35;36167:8;36141:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36225:8;36203:41;;36218:5;36203:41;;;36235:8;36203:41;;;;;;:::i;:::-;;;;;;;;35937:315;;;:::o;30847:::-;31004:28;31014:4;31020:2;31024:7;31004:9;:28::i;:::-;31051:48;31074:4;31080:2;31084:7;31093:5;31051:22;:48::i;:::-;31043:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30847:315;;;;:::o;46340:102::-;46400:13;46429:7;46422:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46340:102;:::o;17375:157::-;17460:4;17499:25;17484:40;;;:11;:40;;;;17477:47;;17375:157;;;:::o;41518:589::-;41662:45;41689:4;41695:2;41699:7;41662:26;:45::i;:::-;41740:1;41724:18;;:4;:18;;;41720:187;;;41759:40;41791:7;41759:31;:40::i;:::-;41720:187;;;41829:2;41821:10;;:4;:10;;;41817:90;;41848:47;41881:4;41887:7;41848:32;:47::i;:::-;41817:90;41720:187;41935:1;41921:16;;:2;:16;;;41917:183;;;41954:45;41991:7;41954:36;:45::i;:::-;41917:183;;;42027:4;42021:10;;:2;:10;;;42017:83;;42048:40;42076:2;42080:7;42048:27;:40::i;:::-;42017:83;41917:183;41518:589;;;:::o;38699:125::-;;;;:::o;32796:321::-;32926:18;32932:2;32936:7;32926:5;:18::i;:::-;32977:54;33008:1;33012:2;33016:7;33025:5;32977:22;:54::i;:::-;32955:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32796:321;;;:::o;36817:799::-;36972:4;36993:15;:2;:13;;;:15::i;:::-;36989:620;;;37045:2;37029:36;;;37066:12;:10;:12::i;:::-;37080:4;37086:7;37095:5;37029:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37025:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37288:1;37271:6;:13;:18;37267:272;;;37314:60;;;;;;;;;;:::i;:::-;;;;;;;;37267:272;37489:6;37483:13;37474:6;37470:2;37466:15;37459:38;37025:529;37162:41;;;37152:51;;;:6;:51;;;;37145:58;;;;;36989:620;37593:4;37586:11;;36817:799;;;;;;;:::o;38188:126::-;;;;:::o;42830:164::-;42934:10;:17;;;;42907:15;:24;42923:7;42907:24;;;;;;;;;;;:44;;;;42962:10;42978:7;42962:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42830:164;:::o;43621:988::-;43887:22;43937:1;43912:22;43929:4;43912:16;:22::i;:::-;:26;;;;:::i;:::-;43887:51;;43949:18;43970:17;:26;43988:7;43970:26;;;;;;;;;;;;43949:47;;44117:14;44103:10;:28;44099:328;;44148:19;44170:12;:18;44183:4;44170:18;;;;;;;;;;;;;;;:34;44189:14;44170:34;;;;;;;;;;;;44148:56;;44254:11;44221:12;:18;44234:4;44221:18;;;;;;;;;;;;;;;:30;44240:10;44221:30;;;;;;;;;;;:44;;;;44371:10;44338:17;:30;44356:11;44338:30;;;;;;;;;;;:43;;;;44133:294;44099:328;44523:17;:26;44541:7;44523:26;;;;;;;;;;;44516:33;;;44567:12;:18;44580:4;44567:18;;;;;;;;;;;;;;;:34;44586:14;44567:34;;;;;;;;;;;44560:41;;;43702:907;;43621:988;;:::o;44904:1079::-;45157:22;45202:1;45182:10;:17;;;;:21;;;;:::i;:::-;45157:46;;45214:18;45235:15;:24;45251:7;45235:24;;;;;;;;;;;;45214:45;;45586:19;45608:10;45619:14;45608:26;;;;;;;;:::i;:::-;;;;;;;;;;45586:48;;45672:11;45647:10;45658;45647:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45783:10;45752:15;:28;45768:11;45752:28;;;;;;;;;;;:41;;;;45924:15;:24;45940:7;45924:24;;;;;;;;;;;45917:31;;;45959:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44975:1008;;;44904:1079;:::o;42408:221::-;42493:14;42510:20;42527:2;42510:16;:20::i;:::-;42493:37;;42568:7;42541:12;:16;42554:2;42541:16;;;;;;;;;;;;;;;:24;42558:6;42541:24;;;;;;;;;;;:34;;;;42615:6;42586:17;:26;42604:7;42586:26;;;;;;;;;;;:35;;;;42482:147;42408:221;;:::o;33453:439::-;33547:1;33533:16;;:2;:16;;;;33525:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33606:16;33614:7;33606;:16::i;:::-;33605:17;33597:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33668:45;33697:1;33701:2;33705:7;33668:20;:45::i;:::-;33743:1;33726:9;:13;33736:2;33726:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33774:2;33755:7;:16;33763:7;33755:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33819:7;33815:2;33794:33;;33811:1;33794:33;;;;;;;;;;;;33840:44;33868:1;33872:2;33876:7;33840:19;:44::i;:::-;33453:439;;:::o;7269:326::-;7329:4;7586:1;7564:7;:19;;;:23;7557:30;;7269:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7158:118;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7282:109;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;7397:360;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;7763:364;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;8133:377;;;;:::o;8516:366::-;8658:3;8679:67;8743:2;8738:3;8679:67;:::i;:::-;8672:74;;8755:93;8844:3;8755:93;:::i;:::-;8873:2;8868:3;8864:12;8857:19;;8516:366;;;:::o;8888:::-;9030:3;9051:67;9115:2;9110:3;9051:67;:::i;:::-;9044:74;;9127:93;9216:3;9127:93;:::i;:::-;9245:2;9240:3;9236:12;9229:19;;8888:366;;;:::o;9260:::-;9402:3;9423:67;9487:2;9482:3;9423:67;:::i;:::-;9416:74;;9499:93;9588:3;9499:93;:::i;:::-;9617:2;9612:3;9608:12;9601:19;;9260:366;;;:::o;9632:::-;9774:3;9795:67;9859:2;9854:3;9795:67;:::i;:::-;9788:74;;9871:93;9960:3;9871:93;:::i;:::-;9989:2;9984:3;9980:12;9973:19;;9632:366;;;:::o;10004:::-;10146:3;10167:67;10231:2;10226:3;10167:67;:::i;:::-;10160:74;;10243:93;10332:3;10243:93;:::i;:::-;10361:2;10356:3;10352:12;10345:19;;10004:366;;;:::o;10376:::-;10518:3;10539:67;10603:2;10598:3;10539:67;:::i;:::-;10532:74;;10615:93;10704:3;10615:93;:::i;:::-;10733:2;10728:3;10724:12;10717:19;;10376:366;;;:::o;10748:::-;10890:3;10911:67;10975:2;10970:3;10911:67;:::i;:::-;10904:74;;10987:93;11076:3;10987:93;:::i;:::-;11105:2;11100:3;11096:12;11089:19;;10748:366;;;:::o;11120:::-;11262:3;11283:67;11347:2;11342:3;11283:67;:::i;:::-;11276:74;;11359:93;11448:3;11359:93;:::i;:::-;11477:2;11472:3;11468:12;11461:19;;11120:366;;;:::o;11492:::-;11634:3;11655:67;11719:2;11714:3;11655:67;:::i;:::-;11648:74;;11731:93;11820:3;11731:93;:::i;:::-;11849:2;11844:3;11840:12;11833:19;;11492:366;;;:::o;11864:::-;12006:3;12027:67;12091:2;12086:3;12027:67;:::i;:::-;12020:74;;12103:93;12192:3;12103:93;:::i;:::-;12221:2;12216:3;12212:12;12205:19;;11864:366;;;:::o;12236:::-;12378:3;12399:67;12463:2;12458:3;12399:67;:::i;:::-;12392:74;;12475:93;12564:3;12475:93;:::i;:::-;12593:2;12588:3;12584:12;12577:19;;12236:366;;;:::o;12608:::-;12750:3;12771:67;12835:2;12830:3;12771:67;:::i;:::-;12764:74;;12847:93;12936:3;12847:93;:::i;:::-;12965:2;12960:3;12956:12;12949:19;;12608:366;;;:::o;12980:::-;13122:3;13143:67;13207:2;13202:3;13143:67;:::i;:::-;13136:74;;13219:93;13308:3;13219:93;:::i;:::-;13337:2;13332:3;13328:12;13321:19;;12980:366;;;:::o;13352:::-;13494:3;13515:67;13579:2;13574:3;13515:67;:::i;:::-;13508:74;;13591:93;13680:3;13591:93;:::i;:::-;13709:2;13704:3;13700:12;13693:19;;13352:366;;;:::o;13724:::-;13866:3;13887:67;13951:2;13946:3;13887:67;:::i;:::-;13880:74;;13963:93;14052:3;13963:93;:::i;:::-;14081:2;14076:3;14072:12;14065:19;;13724:366;;;:::o;14096:::-;14238:3;14259:67;14323:2;14318:3;14259:67;:::i;:::-;14252:74;;14335:93;14424:3;14335:93;:::i;:::-;14453:2;14448:3;14444:12;14437:19;;14096:366;;;:::o;14468:398::-;14627:3;14648:83;14729:1;14724:3;14648:83;:::i;:::-;14641:90;;14740:93;14829:3;14740:93;:::i;:::-;14858:1;14853:3;14849:11;14842:18;;14468:398;;;:::o;14872:366::-;15014:3;15035:67;15099:2;15094:3;15035:67;:::i;:::-;15028:74;;15111:93;15200:3;15111:93;:::i;:::-;15229:2;15224:3;15220:12;15213:19;;14872:366;;;:::o;15244:::-;15386:3;15407:67;15471:2;15466:3;15407:67;:::i;:::-;15400:74;;15483:93;15572:3;15483:93;:::i;:::-;15601:2;15596:3;15592:12;15585:19;;15244:366;;;:::o;15616:::-;15758:3;15779:67;15843:2;15838:3;15779:67;:::i;:::-;15772:74;;15855:93;15944:3;15855:93;:::i;:::-;15973:2;15968:3;15964:12;15957:19;;15616:366;;;:::o;15988:118::-;16075:24;16093:5;16075:24;:::i;:::-;16070:3;16063:37;15988:118;;:::o;16112:275::-;16244:3;16266:95;16357:3;16348:6;16266:95;:::i;:::-;16259:102;;16378:3;16371:10;;16112:275;;;;:::o;16393:379::-;16577:3;16599:147;16742:3;16599:147;:::i;:::-;16592:154;;16763:3;16756:10;;16393:379;;;:::o;16778:222::-;16871:4;16909:2;16898:9;16894:18;16886:26;;16922:71;16990:1;16979:9;16975:17;16966:6;16922:71;:::i;:::-;16778:222;;;;:::o;17006:640::-;17201:4;17239:3;17228:9;17224:19;17216:27;;17253:71;17321:1;17310:9;17306:17;17297:6;17253:71;:::i;:::-;17334:72;17402:2;17391:9;17387:18;17378:6;17334:72;:::i;:::-;17416;17484:2;17473:9;17469:18;17460:6;17416:72;:::i;:::-;17535:9;17529:4;17525:20;17520:2;17509:9;17505:18;17498:48;17563:76;17634:4;17625:6;17563:76;:::i;:::-;17555:84;;17006:640;;;;;;;:::o;17652:210::-;17739:4;17777:2;17766:9;17762:18;17754:26;;17790:65;17852:1;17841:9;17837:17;17828:6;17790:65;:::i;:::-;17652:210;;;;:::o;17868:313::-;17981:4;18019:2;18008:9;18004:18;17996:26;;18068:9;18062:4;18058:20;18054:1;18043:9;18039:17;18032:47;18096:78;18169:4;18160:6;18096:78;:::i;:::-;18088:86;;17868:313;;;;:::o;18187:419::-;18353:4;18391:2;18380:9;18376:18;18368:26;;18440:9;18434:4;18430:20;18426:1;18415:9;18411:17;18404:47;18468:131;18594:4;18468:131;:::i;:::-;18460:139;;18187:419;;;:::o;18612:::-;18778:4;18816:2;18805:9;18801:18;18793:26;;18865:9;18859:4;18855:20;18851:1;18840:9;18836:17;18829:47;18893:131;19019:4;18893:131;:::i;:::-;18885:139;;18612:419;;;:::o;19037:::-;19203:4;19241:2;19230:9;19226:18;19218:26;;19290:9;19284:4;19280:20;19276:1;19265:9;19261:17;19254:47;19318:131;19444:4;19318:131;:::i;:::-;19310:139;;19037:419;;;:::o;19462:::-;19628:4;19666:2;19655:9;19651:18;19643:26;;19715:9;19709:4;19705:20;19701:1;19690:9;19686:17;19679:47;19743:131;19869:4;19743:131;:::i;:::-;19735:139;;19462:419;;;:::o;19887:::-;20053:4;20091:2;20080:9;20076:18;20068:26;;20140:9;20134:4;20130:20;20126:1;20115:9;20111:17;20104:47;20168:131;20294:4;20168:131;:::i;:::-;20160:139;;19887:419;;;:::o;20312:::-;20478:4;20516:2;20505:9;20501:18;20493:26;;20565:9;20559:4;20555:20;20551:1;20540:9;20536:17;20529:47;20593:131;20719:4;20593:131;:::i;:::-;20585:139;;20312:419;;;:::o;20737:::-;20903:4;20941:2;20930:9;20926:18;20918:26;;20990:9;20984:4;20980:20;20976:1;20965:9;20961:17;20954:47;21018:131;21144:4;21018:131;:::i;:::-;21010:139;;20737:419;;;:::o;21162:::-;21328:4;21366:2;21355:9;21351:18;21343:26;;21415:9;21409:4;21405:20;21401:1;21390:9;21386:17;21379:47;21443:131;21569:4;21443:131;:::i;:::-;21435:139;;21162:419;;;:::o;21587:::-;21753:4;21791:2;21780:9;21776:18;21768:26;;21840:9;21834:4;21830:20;21826:1;21815:9;21811:17;21804:47;21868:131;21994:4;21868:131;:::i;:::-;21860:139;;21587:419;;;:::o;22012:::-;22178:4;22216:2;22205:9;22201:18;22193:26;;22265:9;22259:4;22255:20;22251:1;22240:9;22236:17;22229:47;22293:131;22419:4;22293:131;:::i;:::-;22285:139;;22012:419;;;:::o;22437:::-;22603:4;22641:2;22630:9;22626:18;22618:26;;22690:9;22684:4;22680:20;22676:1;22665:9;22661:17;22654:47;22718:131;22844:4;22718:131;:::i;:::-;22710:139;;22437:419;;;:::o;22862:::-;23028:4;23066:2;23055:9;23051:18;23043:26;;23115:9;23109:4;23105:20;23101:1;23090:9;23086:17;23079:47;23143:131;23269:4;23143:131;:::i;:::-;23135:139;;22862:419;;;:::o;23287:::-;23453:4;23491:2;23480:9;23476:18;23468:26;;23540:9;23534:4;23530:20;23526:1;23515:9;23511:17;23504:47;23568:131;23694:4;23568:131;:::i;:::-;23560:139;;23287:419;;;:::o;23712:::-;23878:4;23916:2;23905:9;23901:18;23893:26;;23965:9;23959:4;23955:20;23951:1;23940:9;23936:17;23929:47;23993:131;24119:4;23993:131;:::i;:::-;23985:139;;23712:419;;;:::o;24137:::-;24303:4;24341:2;24330:9;24326:18;24318:26;;24390:9;24384:4;24380:20;24376:1;24365:9;24361:17;24354:47;24418:131;24544:4;24418:131;:::i;:::-;24410:139;;24137:419;;;:::o;24562:::-;24728:4;24766:2;24755:9;24751:18;24743:26;;24815:9;24809:4;24805:20;24801:1;24790:9;24786:17;24779:47;24843:131;24969:4;24843:131;:::i;:::-;24835:139;;24562:419;;;:::o;24987:::-;25153:4;25191:2;25180:9;25176:18;25168:26;;25240:9;25234:4;25230:20;25226:1;25215:9;25211:17;25204:47;25268:131;25394:4;25268:131;:::i;:::-;25260:139;;24987:419;;;:::o;25412:::-;25578:4;25616:2;25605:9;25601:18;25593:26;;25665:9;25659:4;25655:20;25651:1;25640:9;25636:17;25629:47;25693:131;25819:4;25693:131;:::i;:::-;25685:139;;25412:419;;;:::o;25837:::-;26003:4;26041:2;26030:9;26026:18;26018:26;;26090:9;26084:4;26080:20;26076:1;26065:9;26061:17;26054:47;26118:131;26244:4;26118:131;:::i;:::-;26110:139;;25837:419;;;:::o;26262:222::-;26355:4;26393:2;26382:9;26378:18;26370:26;;26406:71;26474:1;26463:9;26459:17;26450:6;26406:71;:::i;:::-;26262:222;;;;:::o;26490:129::-;26524:6;26551:20;;:::i;:::-;26541:30;;26580:33;26608:4;26600:6;26580:33;:::i;:::-;26490:129;;;:::o;26625:75::-;26658:6;26691:2;26685:9;26675:19;;26625:75;:::o;26706:307::-;26767:4;26857:18;26849:6;26846:30;26843:56;;;26879:18;;:::i;:::-;26843:56;26917:29;26939:6;26917:29;:::i;:::-;26909:37;;27001:4;26995;26991:15;26983:23;;26706:307;;;:::o;27019:308::-;27081:4;27171:18;27163:6;27160:30;27157:56;;;27193:18;;:::i;:::-;27157:56;27231:29;27253:6;27231:29;:::i;:::-;27223:37;;27315:4;27309;27305:15;27297:23;;27019:308;;;:::o;27333:98::-;27384:6;27418:5;27412:12;27402:22;;27333:98;;;:::o;27437:99::-;27489:6;27523:5;27517:12;27507:22;;27437:99;;;:::o;27542:168::-;27625:11;27659:6;27654:3;27647:19;27699:4;27694:3;27690:14;27675:29;;27542:168;;;;:::o;27716:147::-;27817:11;27854:3;27839:18;;27716:147;;;;:::o;27869:169::-;27953:11;27987:6;27982:3;27975:19;28027:4;28022:3;28018:14;28003:29;;27869:169;;;;:::o;28044:148::-;28146:11;28183:3;28168:18;;28044:148;;;;:::o;28198:305::-;28238:3;28257:20;28275:1;28257:20;:::i;:::-;28252:25;;28291:20;28309:1;28291:20;:::i;:::-;28286:25;;28445:1;28377:66;28373:74;28370:1;28367:81;28364:107;;;28451:18;;:::i;:::-;28364:107;28495:1;28492;28488:9;28481:16;;28198:305;;;;:::o;28509:191::-;28549:4;28569:20;28587:1;28569:20;:::i;:::-;28564:25;;28603:20;28621:1;28603:20;:::i;:::-;28598:25;;28642:1;28639;28636:8;28633:34;;;28647:18;;:::i;:::-;28633:34;28692:1;28689;28685:9;28677:17;;28509:191;;;;:::o;28706:96::-;28743:7;28772:24;28790:5;28772:24;:::i;:::-;28761:35;;28706:96;;;:::o;28808:90::-;28842:7;28885:5;28878:13;28871:21;28860:32;;28808:90;;;:::o;28904:149::-;28940:7;28980:66;28973:5;28969:78;28958:89;;28904:149;;;:::o;29059:126::-;29096:7;29136:42;29129:5;29125:54;29114:65;;29059:126;;;:::o;29191:77::-;29228:7;29257:5;29246:16;;29191:77;;;:::o;29274:154::-;29358:6;29353:3;29348;29335:30;29420:1;29411:6;29406:3;29402:16;29395:27;29274:154;;;:::o;29434:307::-;29502:1;29512:113;29526:6;29523:1;29520:13;29512:113;;;29611:1;29606:3;29602:11;29596:18;29592:1;29587:3;29583:11;29576:39;29548:2;29545:1;29541:10;29536:15;;29512:113;;;29643:6;29640:1;29637:13;29634:101;;;29723:1;29714:6;29709:3;29705:16;29698:27;29634:101;29483:258;29434:307;;;:::o;29747:320::-;29791:6;29828:1;29822:4;29818:12;29808:22;;29875:1;29869:4;29865:12;29896:18;29886:81;;29952:4;29944:6;29940:17;29930:27;;29886:81;30014:2;30006:6;30003:14;29983:18;29980:38;29977:84;;;30033:18;;:::i;:::-;29977:84;29798:269;29747:320;;;:::o;30073:281::-;30156:27;30178:4;30156:27;:::i;:::-;30148:6;30144:40;30286:6;30274:10;30271:22;30250:18;30238:10;30235:34;30232:62;30229:88;;;30297:18;;:::i;:::-;30229:88;30337:10;30333:2;30326:22;30116:238;30073:281;;:::o;30360:233::-;30399:3;30422:24;30440:5;30422:24;:::i;:::-;30413:33;;30468:66;30461:5;30458:77;30455:103;;;30538:18;;:::i;:::-;30455:103;30585:1;30578:5;30574:13;30567:20;;30360:233;;;:::o;30599:180::-;30647:77;30644:1;30637:88;30744:4;30741:1;30734:15;30768:4;30765:1;30758:15;30785:180;30833:77;30830:1;30823:88;30930:4;30927:1;30920:15;30954:4;30951:1;30944:15;30971:180;31019:77;31016:1;31009:88;31116:4;31113:1;31106:15;31140:4;31137:1;31130:15;31157:180;31205:77;31202:1;31195:88;31302:4;31299:1;31292:15;31326:4;31323:1;31316:15;31343:180;31391:77;31388:1;31381:88;31488:4;31485:1;31478:15;31512:4;31509:1;31502:15;31529:117;31638:1;31635;31628:12;31652:117;31761:1;31758;31751:12;31775:117;31884:1;31881;31874:12;31898:117;32007:1;32004;31997:12;32021:102;32062:6;32113:2;32109:7;32104:2;32097:5;32093:14;32089:28;32079:38;;32021:102;;;:::o;32129:230::-;32269:34;32265:1;32257:6;32253:14;32246:58;32338:13;32333:2;32325:6;32321:15;32314:38;32129:230;:::o;32365:237::-;32505:34;32501:1;32493:6;32489:14;32482:58;32574:20;32569:2;32561:6;32557:15;32550:45;32365:237;:::o;32608:225::-;32748:34;32744:1;32736:6;32732:14;32725:58;32817:8;32812:2;32804:6;32800:15;32793:33;32608:225;:::o;32839:224::-;32979:34;32975:1;32967:6;32963:14;32956:58;33048:7;33043:2;33035:6;33031:15;33024:32;32839:224;:::o;33069:178::-;33209:30;33205:1;33197:6;33193:14;33186:54;33069:178;:::o;33253:223::-;33393:34;33389:1;33381:6;33377:14;33370:58;33462:6;33457:2;33449:6;33445:15;33438:31;33253:223;:::o;33482:175::-;33622:27;33618:1;33610:6;33606:14;33599:51;33482:175;:::o;33663:231::-;33803:34;33799:1;33791:6;33787:14;33780:58;33872:14;33867:2;33859:6;33855:15;33848:39;33663:231;:::o;33900:243::-;34040:34;34036:1;34028:6;34024:14;34017:58;34109:26;34104:2;34096:6;34092:15;34085:51;33900:243;:::o;34149:229::-;34289:34;34285:1;34277:6;34273:14;34266:58;34358:12;34353:2;34345:6;34341:15;34334:37;34149:229;:::o;34384:228::-;34524:34;34520:1;34512:6;34508:14;34501:58;34593:11;34588:2;34580:6;34576:15;34569:36;34384:228;:::o;34618:182::-;34758:34;34754:1;34746:6;34742:14;34735:58;34618:182;:::o;34806:231::-;34946:34;34942:1;34934:6;34930:14;34923:58;35015:14;35010:2;35002:6;34998:15;34991:39;34806:231;:::o;35043:182::-;35183:34;35179:1;35171:6;35167:14;35160:58;35043:182;:::o;35231:234::-;35371:34;35367:1;35359:6;35355:14;35348:58;35440:17;35435:2;35427:6;35423:15;35416:42;35231:234;:::o;35471:220::-;35611:34;35607:1;35599:6;35595:14;35588:58;35680:3;35675:2;35667:6;35663:15;35656:28;35471:220;:::o;35697:114::-;;:::o;35817:170::-;35957:22;35953:1;35945:6;35941:14;35934:46;35817:170;:::o;35993:236::-;36133:34;36129:1;36121:6;36117:14;36110:58;36202:19;36197:2;36189:6;36185:15;36178:44;35993:236;:::o;36235:231::-;36375:34;36371:1;36363:6;36359:14;36352:58;36444:14;36439:2;36431:6;36427:15;36420:39;36235:231;:::o;36472:122::-;36545:24;36563:5;36545:24;:::i;:::-;36538:5;36535:35;36525:63;;36584:1;36581;36574:12;36525:63;36472:122;:::o;36600:116::-;36670:21;36685:5;36670:21;:::i;:::-;36663:5;36660:32;36650:60;;36706:1;36703;36696:12;36650:60;36600:116;:::o;36722:120::-;36794:23;36811:5;36794:23;:::i;:::-;36787:5;36784:34;36774:62;;36832:1;36829;36822:12;36774:62;36722:120;:::o;36848:122::-;36921:24;36939:5;36921:24;:::i;:::-;36914:5;36911:35;36901:63;;36960:1;36957;36950:12;36901:63;36848:122;:::o
Swarm Source
ipfs://6da6c1e1ca1f24bc0c0c78356f549b5a5b6c0e1f44f0b64b9411b5afd20442b9
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.