Contract
0x491f495371a1cb4a454d98aad9d4c184ad3e8b64
1
Contract Overview
Balance:
0 FTM
My Name Tag:
Not Available
TokenTracker:
[ Download CSV Export ]
Latest 19 internal transactions
[ Download CSV Export ]
Contract Name:
FantomSheepo
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at FtmScan.com on 2021-10-24 */ /** *Submitted for verification at FtmScan.com on 2021-08-25 */ // Sources flattened with hardhat v2.3.0 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT 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/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] 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/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, 'Address: insufficient balance'); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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'); // solhint-disable-next-line avoid-low-level-calls (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'); // solhint-disable-next-line avoid-low-level-calls (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'); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] 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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = '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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, 'Strings: hex length insufficient'); return string(buffer); } } // File @openzeppelin/contracts/utils/introspection/[email protected] 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/[email protected] 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}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, 'ERC721: approval to current owner'); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), 'ERC721: approve caller is not owner nor approved for all'); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), 'ERC721: approved query for nonexistent token'); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), 'ERC721: approve to caller'); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), 'ERC721: transfer caller is not owner nor approved'); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), 'ERC721: transfer caller is not owner nor approved'); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), 'ERC721: transfer to non ERC721Receiver implementer'); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), 'ERC721: operator query for nonexistent token'); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ''); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), 'ERC721: transfer to non ERC721Receiver implementer'); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), 'ERC721: mint to the zero address'); require(!_exists(tokenId), 'ERC721: token already minted'); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, 'ERC721: transfer of token that is not own'); require(to != address(0), 'ERC721: transfer to the zero address'); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev 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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert('ERC721: transfer to non ERC721Receiver implementer'); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` 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 {} } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] 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 tokenId); /** * @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/[email protected] 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 @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorag[email protected] pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), 'ERC721URIStorage: URI query for nonexistent token'); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), 'ERC721URIStorage: URI set of nonexistent token'); _tokenURIs[tokenId] = _tokenURI; } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File @openzeppelin/contracts/security/[email protected] pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), 'Pausable: paused'); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), 'Pausable: not paused'); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File @openzeppelin/contracts/access/[email protected] 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() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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'); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), 'ERC721Burnable: caller is not owner nor approved'); _burn(tokenId); } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, 'Counter: decrement overflow'); unchecked { counter._value = value - 1; } } } // File contracts/Sheepo.sol // Fantom Sheepos! pragma solidity ^0.8.0; contract FantomSheepo is ERC721, ERC721Enumerable, ERC721URIStorage, Pausable, Ownable, ERC721Burnable { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; uint256 public maxSupply = 1000; uint256 public price = 1 * 1 ether; string public baseURI; constructor() ERC721('FantomSheepo', 'SHEEPO') {} function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function withdraw() public onlyOwner { payable(msg.sender).transfer(address(this).balance); } function setMaxSupply(uint256 newMaxSupply) public onlyOwner { maxSupply = newMaxSupply; } function setBaseURI(string memory newBaseURI) public onlyOwner { baseURI = newBaseURI; } function setPrice(uint256 newPrice) public onlyOwner { price = newPrice; } function _baseURI() internal view override returns (string memory) { return baseURI; } function internalMint(address to) internal { require(totalSupply() <= maxSupply, 'supply depleted'); _safeMint(to, _tokenIdCounter.current()); _tokenIdCounter.increment(); } function safeMint(address to) public onlyOwner { internalMint(to); } function buySheepos(uint256 amount) public payable { require(msg.value >= price * amount, 'not enough was paid'); for (uint256 i = 0; i < amount; i++) { internalMint(msg.sender); } } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal override(ERC721, ERC721Enumerable) whenNotPaused { super._beforeTokenTransfer(from, to, tokenId); } // The following functions are overrides required by Solidity. function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) { super._burn(tokenId); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { return super.tokenURI(tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"buySheepos","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"safeMint","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":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526103e8600d55670de0b6b3a7640000600e553480156200002357600080fd5b506040518060400160405280600c81526020017f46616e746f6d53686565706f00000000000000000000000000000000000000008152506040518060400160405280600681526020017f53484545504f00000000000000000000000000000000000000000000000000008152508160009080519060200190620000a89291906200019e565b508060019080519060200190620000c19291906200019e565b5050506000600b60006101000a81548160ff0219169083151502179055506000620000f16200019660201b60201c565b905080600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002b3565b600033905090565b828054620001ac906200024e565b90600052602060002090601f016020900481019282620001d057600085556200021c565b82601f10620001eb57805160ff19168380011785556200021c565b828001600101855582156200021c579182015b828111156200021b578251825591602001919060010190620001fe565b5b5090506200022b91906200022f565b5090565b5b808211156200024a57600081600090555060010162000230565b5090565b600060028204905060018216806200026757607f821691505b602082108114156200027e576200027d62000284565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6146b980620002c36000396000f3fe6080604052600436106101e35760003560e01c80636c0360eb11610102578063a035b1fe11610095578063d5abeb0111610064578063d5abeb01146106b6578063e985e9c5146106e1578063f2fde38b1461071e578063fedb739b14610747576101e3565b8063a035b1fe146105fc578063a22cb46514610627578063b88d4fde14610650578063c87b56dd14610679576101e3565b80638456cb59116100d15780638456cb59146105665780638da5cb5b1461057d57806391b7f5ed146105a857806395d89b41146105d1576101e3565b80636c0360eb146104be5780636f8b44b0146104e957806370a0823114610512578063715018a61461054f576101e3565b80633f4ba83a1161017a5780634f6ccce7116101495780634f6ccce7146103f057806355f804b31461042d5780635c975abb146104565780636352211e14610481576101e3565b80633f4ba83a1461035e57806340d097c31461037557806342842e0e1461039e57806342966c68146103c7576101e3565b806318160ddd116101b657806318160ddd146102b657806323b872dd146102e15780632f745c591461030a5780633ccfd60b14610347576101e3565b806301ffc9a7146101e857806306fdde0314610225578063081812fc14610250578063095ea7b31461028d575b600080fd5b3480156101f457600080fd5b5061020f600480360381019061020a9190613273565b610763565b60405161021c91906137e6565b60405180910390f35b34801561023157600080fd5b5061023a610775565b6040516102479190613801565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190613316565b610807565b604051610284919061377f565b60405180910390f35b34801561029957600080fd5b506102b460048036038101906102af9190613233565b61088c565b005b3480156102c257600080fd5b506102cb6109a4565b6040516102d89190613b23565b60405180910390f35b3480156102ed57600080fd5b506103086004803603810190610303919061311d565b6109b1565b005b34801561031657600080fd5b50610331600480360381019061032c9190613233565b610a11565b60405161033e9190613b23565b60405180910390f35b34801561035357600080fd5b5061035c610ab6565b005b34801561036a57600080fd5b50610373610b7b565b005b34801561038157600080fd5b5061039c600480360381019061039791906130b0565b610c01565b005b3480156103aa57600080fd5b506103c560048036038101906103c0919061311d565b610c89565b005b3480156103d357600080fd5b506103ee60048036038101906103e99190613316565b610ca9565b005b3480156103fc57600080fd5b5061041760048036038101906104129190613316565b610d05565b6040516104249190613b23565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f91906132cd565b610d76565b005b34801561046257600080fd5b5061046b610e0c565b60405161047891906137e6565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190613316565b610e23565b6040516104b5919061377f565b60405180910390f35b3480156104ca57600080fd5b506104d3610ed5565b6040516104e09190613801565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b9190613316565b610f63565b005b34801561051e57600080fd5b50610539600480360381019061053491906130b0565b610fe9565b6040516105469190613b23565b60405180910390f35b34801561055b57600080fd5b506105646110a1565b005b34801561057257600080fd5b5061057b6111de565b005b34801561058957600080fd5b50610592611264565b60405161059f919061377f565b60405180910390f35b3480156105b457600080fd5b506105cf60048036038101906105ca9190613316565b61128e565b005b3480156105dd57600080fd5b506105e6611314565b6040516105f39190613801565b60405180910390f35b34801561060857600080fd5b506106116113a6565b60405161061e9190613b23565b60405180910390f35b34801561063357600080fd5b5061064e600480360381019061064991906131f3565b6113ac565b005b34801561065c57600080fd5b5061067760048036038101906106729190613170565b61152d565b005b34801561068557600080fd5b506106a0600480360381019061069b9190613316565b61158f565b6040516106ad9190613801565b60405180910390f35b3480156106c257600080fd5b506106cb6115a1565b6040516106d89190613b23565b60405180910390f35b3480156106ed57600080fd5b50610708600480360381019061070391906130dd565b6115a7565b60405161071591906137e6565b60405180910390f35b34801561072a57600080fd5b50610745600480360381019061074091906130b0565b61163b565b005b610761600480360381019061075c9190613316565b6117e7565b005b600061076e82611862565b9050919050565b60606000805461078490613dd3565b80601f01602080910402602001604051908101604052809291908181526020018280546107b090613dd3565b80156107fd5780601f106107d2576101008083540402835291602001916107fd565b820191906000526020600020905b8154815290600101906020018083116107e057829003601f168201915b5050505050905090565b6000610812826118dc565b610851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084890613a03565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061089782610e23565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ff90613a83565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610927611948565b73ffffffffffffffffffffffffffffffffffffffff161480610956575061095581610950611948565b6115a7565b5b610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098c90613963565b60405180910390fd5b61099f8383611950565b505050565b6000600880549050905090565b6109c26109bc611948565b82611a09565b610a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f890613ac3565b60405180910390fd5b610a0c838383611ae7565b505050565b6000610a1c83610fe9565b8210610a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5490613863565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610abe611948565b73ffffffffffffffffffffffffffffffffffffffff16610adc611264565b73ffffffffffffffffffffffffffffffffffffffff1614610b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2990613a23565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b78573d6000803e3d6000fd5b50565b610b83611948565b73ffffffffffffffffffffffffffffffffffffffff16610ba1611264565b73ffffffffffffffffffffffffffffffffffffffff1614610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee90613a23565b60405180910390fd5b610bff611d43565b565b610c09611948565b73ffffffffffffffffffffffffffffffffffffffff16610c27611264565b73ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490613a23565b60405180910390fd5b610c8681611de5565b50565b610ca48383836040518060200160405280600081525061152d565b505050565b610cba610cb4611948565b82611a09565b610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090613b03565b60405180910390fd5b610d0281611e51565b50565b6000610d0f6109a4565b8210610d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4790613ae3565b60405180910390fd5b60088281548110610d6457610d63613f6c565b5b90600052602060002001549050919050565b610d7e611948565b73ffffffffffffffffffffffffffffffffffffffff16610d9c611264565b73ffffffffffffffffffffffffffffffffffffffff1614610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de990613a23565b60405180910390fd5b80600f9080519060200190610e08929190612e84565b5050565b6000600b60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec3906139a3565b60405180910390fd5b80915050919050565b600f8054610ee290613dd3565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0e90613dd3565b8015610f5b5780601f10610f3057610100808354040283529160200191610f5b565b820191906000526020600020905b815481529060010190602001808311610f3e57829003601f168201915b505050505081565b610f6b611948565b73ffffffffffffffffffffffffffffffffffffffff16610f89611264565b73ffffffffffffffffffffffffffffffffffffffff1614610fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd690613a23565b60405180910390fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190613983565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110a9611948565b73ffffffffffffffffffffffffffffffffffffffff166110c7611264565b73ffffffffffffffffffffffffffffffffffffffff161461111d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111490613a23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6111e6611948565b73ffffffffffffffffffffffffffffffffffffffff16611204611264565b73ffffffffffffffffffffffffffffffffffffffff161461125a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125190613a23565b60405180910390fd5b611262611e5d565b565b6000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611296611948565b73ffffffffffffffffffffffffffffffffffffffff166112b4611264565b73ffffffffffffffffffffffffffffffffffffffff161461130a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130190613a23565b60405180910390fd5b80600e8190555050565b60606001805461132390613dd3565b80601f016020809104026020016040519081016040528092919081815260200182805461134f90613dd3565b801561139c5780601f106113715761010080835404028352916020019161139c565b820191906000526020600020905b81548152906001019060200180831161137f57829003601f168201915b5050505050905090565b600e5481565b6113b4611948565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141990613903565b60405180910390fd5b806005600061142f611948565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114dc611948565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161152191906137e6565b60405180910390a35050565b61153e611538611948565b83611a09565b61157d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157490613ac3565b60405180910390fd5b61158984848484611f00565b50505050565b606061159a82611f5c565b9050919050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611643611948565b73ffffffffffffffffffffffffffffffffffffffff16611661611264565b73ffffffffffffffffffffffffffffffffffffffff16146116b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ae90613a23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e906138a3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b80600e546117f59190613c8f565b341015611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e90613aa3565b60405180910390fd5b60005b8181101561185e5761184b33611de5565b808061185690613e36565b91505061183a565b5050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806118d557506118d4826120ae565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166119c383610e23565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611a14826118dc565b611a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4a90613923565b60405180910390fd5b6000611a5e83610e23565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611acd57508373ffffffffffffffffffffffffffffffffffffffff16611ab584610807565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ade5750611add81856115a7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b0782610e23565b73ffffffffffffffffffffffffffffffffffffffff1614611b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5490613a43565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc4906138e3565b60405180910390fd5b611bd8838383612190565b611be3600082611950565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c339190613ce9565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c8a9190613c08565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611d4b610e0c565b611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8190613823565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611dce611948565b604051611ddb919061377f565b60405180910390a1565b600d54611df06109a4565b1115611e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2890613843565b60405180910390fd5b611e4481611e3f600c6121e8565b6121f6565b611e4e600c612214565b50565b611e5a8161222a565b50565b611e65610e0c565b15611ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9c90613943565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611ee9611948565b604051611ef6919061377f565b60405180910390a1565b611f0b848484611ae7565b611f178484848461227d565b611f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4d90613883565b60405180910390fd5b50505050565b6060611f67826118dc565b611fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9d906139e3565b60405180910390fd5b6000600a60008481526020019081526020016000208054611fc690613dd3565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff290613dd3565b801561203f5780601f106120145761010080835404028352916020019161203f565b820191906000526020600020905b81548152906001019060200180831161202257829003601f168201915b505050505090506000612050612414565b90506000815114156120665781925050506120a9565b60008251111561209b57808260405160200161208392919061375b565b604051602081830303815290604052925050506120a9565b6120a4846124a6565b925050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061217957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061218957506121888261254d565b5b9050919050565b612198610e0c565b156121d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cf90613943565b60405180910390fd5b6121e38383836125b7565b505050565b600081600001549050919050565b6122108282604051806020016040528060008152506126cb565b5050565b6001816000016000828254019250508190555050565b61223381612726565b6000600a6000838152602001908152602001600020805461225390613dd3565b90501461227a57600a600082815260200190815260200160002060006122799190612f0a565b5b50565b600061229e8473ffffffffffffffffffffffffffffffffffffffff16612837565b15612407578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122c7611948565b8786866040518563ffffffff1660e01b81526004016122e9949392919061379a565b602060405180830381600087803b15801561230357600080fd5b505af192505050801561233457506040513d601f19601f8201168201806040525081019061233191906132a0565b60015b6123b7573d8060008114612364576040519150601f19603f3d011682016040523d82523d6000602084013e612369565b606091505b506000815114156123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a690613883565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061240c565b600190505b949350505050565b6060600f805461242390613dd3565b80601f016020809104026020016040519081016040528092919081815260200182805461244f90613dd3565b801561249c5780601f106124715761010080835404028352916020019161249c565b820191906000526020600020905b81548152906001019060200180831161247f57829003601f168201915b5050505050905090565b60606124b1826118dc565b6124f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e790613a63565b60405180910390fd5b60006124fa612414565b9050600081511161251a5760405180602001604052806000815250612545565b806125248461284a565b60405160200161253592919061375b565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6125c28383836129ab565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561260557612600816129b0565b612644565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126435761264283826129f9565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126875761268281612b66565b6126c6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146126c5576126c48282612c37565b5b5b505050565b6126d58383612cb6565b6126e2600084848461227d565b612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271890613883565b60405180910390fd5b505050565b600061273182610e23565b905061273f81600084612190565b61274a600083611950565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461279a9190613ce9565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b60606000821415612892576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129a6565b600082905060005b600082146128c45780806128ad90613e36565b915050600a826128bd9190613c5e565b915061289a565b60008167ffffffffffffffff8111156128e0576128df613f9b565b5b6040519080825280601f01601f1916602001820160405280156129125781602001600182028036833780820191505090505b5090505b6000851461299f5760018261292b9190613ce9565b9150600a8561293a9190613e7f565b60306129469190613c08565b60f81b81838151811061295c5761295b613f6c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129989190613c5e565b9450612916565b8093505050505b919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612a0684610fe9565b612a109190613ce9565b9050600060076000848152602001908152602001600020549050818114612af5576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b7a9190613ce9565b9050600060096000848152602001908152602001600020549050600060088381548110612baa57612ba9613f6c565b5b906000526020600020015490508060088381548110612bcc57612bcb613f6c565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612c1b57612c1a613f3d565b5b6001900381819060005260206000200160009055905550505050565b6000612c4283610fe9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1d906139c3565b60405180910390fd5b612d2f816118dc565b15612d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d66906138c3565b60405180910390fd5b612d7b60008383612190565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dcb9190613c08565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612e9090613dd3565b90600052602060002090601f016020900481019282612eb25760008555612ef9565b82601f10612ecb57805160ff1916838001178555612ef9565b82800160010185558215612ef9579182015b82811115612ef8578251825591602001919060010190612edd565b5b509050612f069190612f4a565b5090565b508054612f1690613dd3565b6000825580601f10612f285750612f47565b601f016020900490600052602060002090810190612f469190612f4a565b5b50565b5b80821115612f63576000816000905550600101612f4b565b5090565b6000612f7a612f7584613b63565b613b3e565b905082815260208101848484011115612f9657612f95613fcf565b5b612fa1848285613d91565b509392505050565b6000612fbc612fb784613b94565b613b3e565b905082815260208101848484011115612fd857612fd7613fcf565b5b612fe3848285613d91565b509392505050565b600081359050612ffa81614627565b92915050565b60008135905061300f8161463e565b92915050565b60008135905061302481614655565b92915050565b60008151905061303981614655565b92915050565b600082601f83011261305457613053613fca565b5b8135613064848260208601612f67565b91505092915050565b600082601f83011261308257613081613fca565b5b8135613092848260208601612fa9565b91505092915050565b6000813590506130aa8161466c565b92915050565b6000602082840312156130c6576130c5613fd9565b5b60006130d484828501612feb565b91505092915050565b600080604083850312156130f4576130f3613fd9565b5b600061310285828601612feb565b925050602061311385828601612feb565b9150509250929050565b60008060006060848603121561313657613135613fd9565b5b600061314486828701612feb565b935050602061315586828701612feb565b92505060406131668682870161309b565b9150509250925092565b6000806000806080858703121561318a57613189613fd9565b5b600061319887828801612feb565b94505060206131a987828801612feb565b93505060406131ba8782880161309b565b925050606085013567ffffffffffffffff8111156131db576131da613fd4565b5b6131e78782880161303f565b91505092959194509250565b6000806040838503121561320a57613209613fd9565b5b600061321885828601612feb565b925050602061322985828601613000565b9150509250929050565b6000806040838503121561324a57613249613fd9565b5b600061325885828601612feb565b92505060206132698582860161309b565b9150509250929050565b60006020828403121561328957613288613fd9565b5b600061329784828501613015565b91505092915050565b6000602082840312156132b6576132b5613fd9565b5b60006132c48482850161302a565b91505092915050565b6000602082840312156132e3576132e2613fd9565b5b600082013567ffffffffffffffff81111561330157613300613fd4565b5b61330d8482850161306d565b91505092915050565b60006020828403121561332c5761332b613fd9565b5b600061333a8482850161309b565b91505092915050565b61334c81613d1d565b82525050565b61335b81613d2f565b82525050565b600061336c82613bc5565b6133768185613bdb565b9350613386818560208601613da0565b61338f81613fde565b840191505092915050565b60006133a582613bd0565b6133af8185613bec565b93506133bf818560208601613da0565b6133c881613fde565b840191505092915050565b60006133de82613bd0565b6133e88185613bfd565b93506133f8818560208601613da0565b80840191505092915050565b6000613411601483613bec565b915061341c82613fef565b602082019050919050565b6000613434600f83613bec565b915061343f82614018565b602082019050919050565b6000613457602b83613bec565b915061346282614041565b604082019050919050565b600061347a603283613bec565b915061348582614090565b604082019050919050565b600061349d602683613bec565b91506134a8826140df565b604082019050919050565b60006134c0601c83613bec565b91506134cb8261412e565b602082019050919050565b60006134e3602483613bec565b91506134ee82614157565b604082019050919050565b6000613506601983613bec565b9150613511826141a6565b602082019050919050565b6000613529602c83613bec565b9150613534826141cf565b604082019050919050565b600061354c601083613bec565b91506135578261421e565b602082019050919050565b600061356f603883613bec565b915061357a82614247565b604082019050919050565b6000613592602a83613bec565b915061359d82614296565b604082019050919050565b60006135b5602983613bec565b91506135c0826142e5565b604082019050919050565b60006135d8602083613bec565b91506135e382614334565b602082019050919050565b60006135fb603183613bec565b91506136068261435d565b604082019050919050565b600061361e602c83613bec565b9150613629826143ac565b604082019050919050565b6000613641602083613bec565b915061364c826143fb565b602082019050919050565b6000613664602983613bec565b915061366f82614424565b604082019050919050565b6000613687602f83613bec565b915061369282614473565b604082019050919050565b60006136aa602183613bec565b91506136b5826144c2565b604082019050919050565b60006136cd601383613bec565b91506136d882614511565b602082019050919050565b60006136f0603183613bec565b91506136fb8261453a565b604082019050919050565b6000613713602c83613bec565b915061371e82614589565b604082019050919050565b6000613736603083613bec565b9150613741826145d8565b604082019050919050565b61375581613d87565b82525050565b600061376782856133d3565b915061377382846133d3565b91508190509392505050565b60006020820190506137946000830184613343565b92915050565b60006080820190506137af6000830187613343565b6137bc6020830186613343565b6137c9604083018561374c565b81810360608301526137db8184613361565b905095945050505050565b60006020820190506137fb6000830184613352565b92915050565b6000602082019050818103600083015261381b818461339a565b905092915050565b6000602082019050818103600083015261383c81613404565b9050919050565b6000602082019050818103600083015261385c81613427565b9050919050565b6000602082019050818103600083015261387c8161344a565b9050919050565b6000602082019050818103600083015261389c8161346d565b9050919050565b600060208201905081810360008301526138bc81613490565b9050919050565b600060208201905081810360008301526138dc816134b3565b9050919050565b600060208201905081810360008301526138fc816134d6565b9050919050565b6000602082019050818103600083015261391c816134f9565b9050919050565b6000602082019050818103600083015261393c8161351c565b9050919050565b6000602082019050818103600083015261395c8161353f565b9050919050565b6000602082019050818103600083015261397c81613562565b9050919050565b6000602082019050818103600083015261399c81613585565b9050919050565b600060208201905081810360008301526139bc816135a8565b9050919050565b600060208201905081810360008301526139dc816135cb565b9050919050565b600060208201905081810360008301526139fc816135ee565b9050919050565b60006020820190508181036000830152613a1c81613611565b9050919050565b60006020820190508181036000830152613a3c81613634565b9050919050565b60006020820190508181036000830152613a5c81613657565b9050919050565b60006020820190508181036000830152613a7c8161367a565b9050919050565b60006020820190508181036000830152613a9c8161369d565b9050919050565b60006020820190508181036000830152613abc816136c0565b9050919050565b60006020820190508181036000830152613adc816136e3565b9050919050565b60006020820190508181036000830152613afc81613706565b9050919050565b60006020820190508181036000830152613b1c81613729565b9050919050565b6000602082019050613b38600083018461374c565b92915050565b6000613b48613b59565b9050613b548282613e05565b919050565b6000604051905090565b600067ffffffffffffffff821115613b7e57613b7d613f9b565b5b613b8782613fde565b9050602081019050919050565b600067ffffffffffffffff821115613baf57613bae613f9b565b5b613bb882613fde565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613c1382613d87565b9150613c1e83613d87565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c5357613c52613eb0565b5b828201905092915050565b6000613c6982613d87565b9150613c7483613d87565b925082613c8457613c83613edf565b5b828204905092915050565b6000613c9a82613d87565b9150613ca583613d87565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cde57613cdd613eb0565b5b828202905092915050565b6000613cf482613d87565b9150613cff83613d87565b925082821015613d1257613d11613eb0565b5b828203905092915050565b6000613d2882613d67565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613dbe578082015181840152602081019050613da3565b83811115613dcd576000848401525b50505050565b60006002820490506001821680613deb57607f821691505b60208210811415613dff57613dfe613f0e565b5b50919050565b613e0e82613fde565b810181811067ffffffffffffffff82111715613e2d57613e2c613f9b565b5b80604052505050565b6000613e4182613d87565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e7457613e73613eb0565b5b600182019050919050565b6000613e8a82613d87565b9150613e9583613d87565b925082613ea557613ea4613edf565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f737570706c79206465706c657465640000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f75676820776173207061696400000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b61463081613d1d565b811461463b57600080fd5b50565b61464781613d2f565b811461465257600080fd5b50565b61465e81613d3b565b811461466957600080fd5b50565b61467581613d87565b811461468057600080fd5b5056fea26469706673582212203c46e67bee0c87c7abe33dfe5d47e0ef3967efb593f32133ccd5decc0406fed364736f6c63430008070033
Deployed ByteCode Sourcemap
49765:2355:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51946:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22005:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23416:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22976:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35671:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24306:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35339:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50274:107;;;;;;;;;;;;;:::i;:::-;;50201:65;;;;;;;;;;;;;:::i;:::-;;51028:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24716:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48118:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35861:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50501:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44177:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21699:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50045:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50389:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21429:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47109:148;;;;;;;;;;;;;:::i;:::-;;50132:61;;;;;;;;;;;;;:::i;:::-;;46458:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50611:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22174:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50004:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23709:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24972:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51783:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49966:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24075:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47412:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51118:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51946:171;52049:4;52073:36;52097:11;52073:23;:36::i;:::-;52066:43;;51946:171;;;:::o;22005:100::-;22059:13;22092:5;22085:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22005:100;:::o;23416:221::-;23492:7;23520:16;23528:7;23520;:16::i;:::-;23512:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23605:15;:24;23621:7;23605:24;;;;;;;;;;;;;;;;;;;;;23598:31;;23416:221;;;:::o;22976:374::-;23057:13;23073:23;23088:7;23073:14;:23::i;:::-;23057:39;;23121:5;23115:11;;:2;:11;;;;23107:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23201:5;23185:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23210:37;23227:5;23234:12;:10;:12::i;:::-;23210:16;:37::i;:::-;23185:62;23177:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;23321:21;23330:2;23334:7;23321:8;:21::i;:::-;23046:304;22976:374;;:::o;35671:113::-;35732:7;35759:10;:17;;;;35752:24;;35671:113;:::o;24306:339::-;24501:41;24520:12;:10;:12::i;:::-;24534:7;24501:18;:41::i;:::-;24493:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24609:28;24619:4;24625:2;24629:7;24609:9;:28::i;:::-;24306:339;;;:::o;35339:256::-;35436:7;35472:23;35489:5;35472:16;:23::i;:::-;35464:5;:31;35456:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35561:12;:19;35574:5;35561:19;;;;;;;;;;;;;;;:26;35581:5;35561:26;;;;;;;;;;;;35554:33;;35339:256;;;;:::o;50274:107::-;46689:12;:10;:12::i;:::-;46678:23;;:7;:5;:7::i;:::-;:23;;;46670:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50330:10:::1;50322:28;;:51;50351:21;50322:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50274:107::o:0;50201:65::-;46689:12;:10;:12::i;:::-;46678:23;;:7;:5;:7::i;:::-;:23;;;46670:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50248:10:::1;:8;:10::i;:::-;50201:65::o:0;51028:82::-;46689:12;:10;:12::i;:::-;46678:23;;:7;:5;:7::i;:::-;:23;;;46670:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51086:16:::1;51099:2;51086:12;:16::i;:::-;51028:82:::0;:::o;24716:185::-;24854:39;24871:4;24877:2;24881:7;24854:39;;;;;;;;;;;;:16;:39::i;:::-;24716:185;;;:::o;48118:245::-;48236:41;48255:12;:10;:12::i;:::-;48269:7;48236:18;:41::i;:::-;48228:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;48341:14;48347:7;48341:5;:14::i;:::-;48118:245;:::o;35861:233::-;35936:7;35972:30;:28;:30::i;:::-;35964:5;:38;35956:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36069:10;36080:5;36069:17;;;;;;;;:::i;:::-;;;;;;;;;;36062:24;;35861:233;;;:::o;50501:102::-;46689:12;:10;:12::i;:::-;46678:23;;:7;:5;:7::i;:::-;:23;;;46670:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50585:10:::1;50575:7;:20;;;;;;;;;;;;:::i;:::-;;50501:102:::0;:::o;44177:86::-;44224:4;44248:7;;;;;;;;;;;44241:14;;44177:86;:::o;21699:239::-;21771:7;21791:13;21807:7;:16;21815:7;21807:16;;;;;;;;;;;;;;;;;;;;;21791:32;;21859:1;21842:19;;:5;:19;;;;21834:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21925:5;21918:12;;;21699:239;;;:::o;50045:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50389:104::-;46689:12;:10;:12::i;:::-;46678:23;;:7;:5;:7::i;:::-;:23;;;46670:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50473:12:::1;50461:9;:24;;;;50389:104:::0;:::o;21429:208::-;21501:7;21546:1;21529:19;;:5;:19;;;;21521:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21613:9;:16;21623:5;21613:16;;;;;;;;;;;;;;;;21606:23;;21429:208;;;:::o;47109:148::-;46689:12;:10;:12::i;:::-;46678:23;;:7;:5;:7::i;:::-;:23;;;46670:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47216:1:::1;47179:40;;47200:6;;;;;;;;;;;47179:40;;;;;;;;;;;;47247:1;47230:6;;:19;;;;;;;;;;;;;;;;;;47109:148::o:0;50132:61::-;46689:12;:10;:12::i;:::-;46678:23;;:7;:5;:7::i;:::-;:23;;;46670:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50177:8:::1;:6;:8::i;:::-;50132:61::o:0;46458:87::-;46504:7;46531:6;;;;;;;;;;;46524:13;;46458:87;:::o;50611:88::-;46689:12;:10;:12::i;:::-;46678:23;;:7;:5;:7::i;:::-;:23;;;46670:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50683:8:::1;50675:5;:16;;;;50611:88:::0;:::o;22174:104::-;22230:13;22263:7;22256:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22174:104;:::o;50004:34::-;;;;:::o;23709:295::-;23824:12;:10;:12::i;:::-;23812:24;;:8;:24;;;;23804:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23924:8;23879:18;:32;23898:12;:10;:12::i;:::-;23879:32;;;;;;;;;;;;;;;:42;23912:8;23879:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23977:8;23948:48;;23963:12;:10;:12::i;:::-;23948:48;;;23987:8;23948:48;;;;;;:::i;:::-;;;;;;;;23709:295;;:::o;24972:328::-;25147:41;25166:12;:10;:12::i;:::-;25180:7;25147:18;:41::i;:::-;25139:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25253:39;25267:4;25273:2;25277:7;25286:5;25253:13;:39::i;:::-;24972:328;;;;:::o;51783:155::-;51874:13;51907:23;51922:7;51907:14;:23::i;:::-;51900:30;;51783:155;;;:::o;49966:31::-;;;;:::o;24075:164::-;24172:4;24196:18;:25;24215:5;24196:25;;;;;;;;;;;;;;;:35;24222:8;24196:35;;;;;;;;;;;;;;;;;;;;;;;;;24189:42;;24075:164;;;;:::o;47412:244::-;46689:12;:10;:12::i;:::-;46678:23;;:7;:5;:7::i;:::-;:23;;;46670:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47521:1:::1;47501:22;;:8;:22;;;;47493:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47611:8;47582:38;;47603:6;;;;;;;;;;;47582:38;;;;;;;;;;;;47640:8;47631:6;;:17;;;;;;;;;;;;;;;;;;47412:244:::0;:::o;51118:227::-;51209:6;51201:5;;:14;;;;:::i;:::-;51188:9;:27;;51180:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;51255:9;51250:88;51274:6;51270:1;:10;51250:88;;;51302:24;51315:10;51302:12;:24::i;:::-;51282:3;;;;;:::i;:::-;;;;51250:88;;;;51118:227;:::o;35031:224::-;35133:4;35172:35;35157:50;;;:11;:50;;;;:90;;;;35211:36;35235:11;35211:23;:36::i;:::-;35157:90;35150:97;;35031:224;;;:::o;26810:127::-;26875:4;26927:1;26899:30;;:7;:16;26907:7;26899:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26892:37;;26810:127;;;:::o;16405:98::-;16458:7;16485:10;16478:17;;16405:98;:::o;30755:174::-;30857:2;30830:15;:24;30846:7;30830:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30913:7;30909:2;30875:46;;30884:23;30899:7;30884:14;:23::i;:::-;30875:46;;;;;;;;;;;;30755:174;;:::o;27104:348::-;27197:4;27222:16;27230:7;27222;:16::i;:::-;27214:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27298:13;27314:23;27329:7;27314:14;:23::i;:::-;27298:39;;27367:5;27356:16;;:7;:16;;;:51;;;;27400:7;27376:31;;:20;27388:7;27376:11;:20::i;:::-;:31;;;27356:51;:87;;;;27411:32;27428:5;27435:7;27411:16;:32::i;:::-;27356:87;27348:96;;;27104:348;;;;:::o;30059:578::-;30218:4;30191:31;;:23;30206:7;30191:14;:23::i;:::-;:31;;;30183:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30301:1;30287:16;;:2;:16;;;;30279:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30357:39;30378:4;30384:2;30388:7;30357:20;:39::i;:::-;30461:29;30478:1;30482:7;30461:8;:29::i;:::-;30522:1;30503:9;:15;30513:4;30503:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30551:1;30534:9;:13;30544:2;30534:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30582:2;30563:7;:16;30571:7;30563:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30621:7;30617:2;30602:27;;30611:4;30602:27;;;;;;;;;;;;30059:578;;;:::o;45236:120::-;44780:8;:6;:8::i;:::-;44772:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;45305:5:::1;45295:7;;:15;;;;;;;;;;;;;;;;;;45326:22;45335:12;:10;:12::i;:::-;45326:22;;;;;;:::i;:::-;;;;;;;;45236:120::o:0;50815:205::-;50894:9;;50877:13;:11;:13::i;:::-;:26;;50869:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;50934:40;50944:2;50948:25;:15;:23;:25::i;:::-;50934:9;:40::i;:::-;50985:27;:15;:25;:27::i;:::-;50815:205;:::o;51660:115::-;51747:20;51759:7;51747:11;:20::i;:::-;51660:115;:::o;44977:118::-;44503:8;:6;:8::i;:::-;44502:9;44494:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;45047:4:::1;45037:7;;:14;;;;;;;;;;;;;;;;;;45067:20;45074:12;:10;:12::i;:::-;45067:20;;;;;;:::i;:::-;;;;;;;;44977:118::o:0;26182:315::-;26339:28;26349:4;26355:2;26359:7;26339:9;:28::i;:::-;26386:48;26409:4;26415:2;26419:7;26428:5;26386:22;:48::i;:::-;26378:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26182:315;;;;:::o;41609:679::-;41682:13;41716:16;41724:7;41716;:16::i;:::-;41708:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;41799:23;41825:10;:19;41836:7;41825:19;;;;;;;;;;;41799:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41855:18;41876:10;:8;:10::i;:::-;41855:31;;41984:1;41968:4;41962:18;:23;41958:72;;;42009:9;42002:16;;;;;;41958:72;42160:1;42140:9;42134:23;:27;42130:108;;;42209:4;42215:9;42192:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42178:48;;;;;;42130:108;42257:23;42272:7;42257:14;:23::i;:::-;42250:30;;;;41609:679;;;;:::o;21099:266::-;21201:4;21240:25;21225:40;;;:11;:40;;;;:92;;;;21284:33;21269:48;;;:11;:48;;;;21225:92;:132;;;;21321:36;21345:11;21321:23;:36::i;:::-;21225:132;21218:139;;21099:266;;;:::o;51353:229::-;44503:8;:6;:8::i;:::-;44502:9;44494:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;51529:45:::1;51556:4;51562:2;51566:7;51529:26;:45::i;:::-;51353:229:::0;;;:::o;49189:114::-;49254:7;49281;:14;;;49274:21;;49189:114;;;:::o;27794:110::-;27870:26;27880:2;27884:7;27870:26;;;;;;;;;;;;:9;:26::i;:::-;27794:110;;:::o;49311:127::-;49418:1;49400:7;:14;;;:19;;;;;;;;;;;49311:127;:::o;42890:206::-;42959:20;42971:7;42959:11;:20::i;:::-;43033:1;43002:10;:19;43013:7;43002:19;;;;;;;;;;;42996:33;;;;;:::i;:::-;;;:38;42992:97;;43058:10;:19;43069:7;43058:19;;;;;;;;;;;;43051:26;;;;:::i;:::-;42992:97;42890:206;:::o;31494:872::-;31649:4;31670:15;:2;:13;;;:15::i;:::-;31666:693;;;31722:2;31706:36;;;31743:12;:10;:12::i;:::-;31757:4;31763:7;31772:5;31706:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31702:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31969:1;31952:6;:13;:18;31948:341;;;31995:60;;;;;;;;;;:::i;:::-;;;;;;;;31948:341;32239:6;32233:13;32224:6;32220:2;32216:15;32209:38;31702:602;31839:45;;;31829:55;;;:6;:55;;;;31822:62;;;;;31666:693;32343:4;32336:11;;31494:872;;;;;;;:::o;50707:100::-;50759:13;50792:7;50785:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50707:100;:::o;22349:334::-;22422:13;22456:16;22464:7;22456;:16::i;:::-;22448:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22537:21;22561:10;:8;:10::i;:::-;22537:34;;22613:1;22595:7;22589:21;:25;:86;;;;;;;;;;;;;;;;;22641:7;22650:18;:7;:16;:18::i;:::-;22624:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22589:86;22582:93;;;22349:334;;;:::o;19615:157::-;19700:4;19739:25;19724:40;;;:11;:40;;;;19717:47;;19615:157;;;:::o;36707:589::-;36851:45;36878:4;36884:2;36888:7;36851:26;:45::i;:::-;36929:1;36913:18;;:4;:18;;;36909:187;;;36948:40;36980:7;36948:31;:40::i;:::-;36909:187;;;37018:2;37010:10;;:4;:10;;;37006:90;;37037:47;37070:4;37076:7;37037:32;:47::i;:::-;37006:90;36909:187;37124:1;37110:16;;:2;:16;;;37106:183;;;37143:45;37180:7;37143:36;:45::i;:::-;37106:183;;;37216:4;37210:10;;:2;:10;;;37206:83;;37237:40;37265:2;37269:7;37237:27;:40::i;:::-;37206:83;37106:183;36707:589;;;:::o;28131:284::-;28261:18;28267:2;28271:7;28261:5;:18::i;:::-;28298:54;28329:1;28333:2;28337:7;28346:5;28298:22;:54::i;:::-;28290:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;28131:284;;;:::o;29362:360::-;29422:13;29438:23;29453:7;29438:14;:23::i;:::-;29422:39;;29474:48;29495:5;29510:1;29514:7;29474:20;:48::i;:::-;29563:29;29580:1;29584:7;29563:8;:29::i;:::-;29625:1;29605:9;:16;29615:5;29605:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;29644:7;:16;29652:7;29644:16;;;;;;;;;;;;29637:23;;;;;;;;;;;29706:7;29702:1;29678:36;;29687:5;29678:36;;;;;;;;;;;;29411:311;29362:360;:::o;8286:444::-;8346:4;8554:12;8678:7;8666:20;8658:28;;8721:1;8714:4;:8;8707:15;;;8286:444;;;:::o;17062:723::-;17118:13;17348:1;17339:5;:10;17335:53;;;17366:10;;;;;;;;;;;;;;;;;;;;;17335:53;17398:12;17413:5;17398:20;;17429:14;17454:78;17469:1;17461:4;:9;17454:78;;17487:8;;;;;:::i;:::-;;;;17518:2;17510:10;;;;;:::i;:::-;;;17454:78;;;17542:19;17574:6;17564:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17542:39;;17592:154;17608:1;17599:5;:10;17592:154;;17636:1;17626:11;;;;;:::i;:::-;;;17703:2;17695:5;:10;;;;:::i;:::-;17682:2;:24;;;;:::i;:::-;17669:39;;17652:6;17659;17652:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17732:2;17723:11;;;;;:::i;:::-;;;17592:154;;;17770:6;17756:21;;;;;17062:723;;;;:::o;32979:126::-;;;;:::o;38019:164::-;38123:10;:17;;;;38096:15;:24;38112:7;38096:24;;;;;;;;;;;:44;;;;38151:10;38167:7;38151:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38019:164;:::o;38810:988::-;39076:22;39126:1;39101:22;39118:4;39101:16;:22::i;:::-;:26;;;;:::i;:::-;39076:51;;39138:18;39159:17;:26;39177:7;39159:26;;;;;;;;;;;;39138:47;;39306:14;39292:10;:28;39288:328;;39337:19;39359:12;:18;39372:4;39359:18;;;;;;;;;;;;;;;:34;39378:14;39359:34;;;;;;;;;;;;39337:56;;39443:11;39410:12;:18;39423:4;39410:18;;;;;;;;;;;;;;;:30;39429:10;39410:30;;;;;;;;;;;:44;;;;39560:10;39527:17;:30;39545:11;39527:30;;;;;;;;;;;:43;;;;39322:294;39288:328;39712:17;:26;39730:7;39712:26;;;;;;;;;;;39705:33;;;39756:12;:18;39769:4;39756:18;;;;;;;;;;;;;;;:34;39775:14;39756:34;;;;;;;;;;;39749:41;;;38891:907;;38810:988;;:::o;40093:1079::-;40346:22;40391:1;40371:10;:17;;;;:21;;;;:::i;:::-;40346:46;;40403:18;40424:15;:24;40440:7;40424:24;;;;;;;;;;;;40403:45;;40775:19;40797:10;40808:14;40797:26;;;;;;;;:::i;:::-;;;;;;;;;;40775:48;;40861:11;40836:10;40847;40836:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40972:10;40941:15;:28;40957:11;40941:28;;;;;;;;;;;:41;;;;41113:15;:24;41129:7;41113:24;;;;;;;;;;;41106:31;;;41148:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40164:1008;;;40093:1079;:::o;37597:221::-;37682:14;37699:20;37716:2;37699:16;:20::i;:::-;37682:37;;37757:7;37730:12;:16;37743:2;37730:16;;;;;;;;;;;;;;;:24;37747:6;37730:24;;;;;;;;;;;:34;;;;37804:6;37775:17;:26;37793:7;37775:26;;;;;;;;;;;:35;;;;37671:147;37597:221;;:::o;28751:382::-;28845:1;28831:16;;:2;:16;;;;28823:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28904:16;28912:7;28904;:16::i;:::-;28903:17;28895:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28966:45;28995:1;28999:2;29003:7;28966:20;:45::i;:::-;29041:1;29024:9;:13;29034:2;29024:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29072:2;29053:7;:16;29061:7;29053:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29117:7;29113:2;29092:33;;29109:1;29092:33;;;;;;;;;;;;28751:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::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:::-;14610:3;14631:67;14695:2;14690:3;14631:67;:::i;:::-;14624:74;;14707:93;14796:3;14707:93;:::i;:::-;14825:2;14820:3;14816:12;14809:19;;14468:366;;;:::o;14840:::-;14982:3;15003:67;15067:2;15062:3;15003:67;:::i;:::-;14996:74;;15079:93;15168:3;15079:93;:::i;:::-;15197:2;15192:3;15188:12;15181:19;;14840:366;;;:::o;15212:::-;15354:3;15375:67;15439:2;15434:3;15375:67;:::i;:::-;15368:74;;15451:93;15540:3;15451:93;:::i;:::-;15569:2;15564:3;15560:12;15553:19;;15212:366;;;:::o;15584:::-;15726:3;15747:67;15811:2;15806:3;15747:67;:::i;:::-;15740:74;;15823:93;15912:3;15823:93;:::i;:::-;15941:2;15936:3;15932:12;15925:19;;15584:366;;;:::o;15956:::-;16098:3;16119:67;16183:2;16178:3;16119:67;:::i;:::-;16112:74;;16195:93;16284:3;16195:93;:::i;:::-;16313:2;16308:3;16304:12;16297:19;;15956:366;;;:::o;16328:::-;16470:3;16491:67;16555:2;16550:3;16491:67;:::i;:::-;16484:74;;16567:93;16656:3;16567:93;:::i;:::-;16685:2;16680:3;16676:12;16669:19;;16328:366;;;:::o;16700:::-;16842:3;16863:67;16927:2;16922:3;16863:67;:::i;:::-;16856:74;;16939:93;17028:3;16939:93;:::i;:::-;17057:2;17052:3;17048:12;17041:19;;16700:366;;;:::o;17072:::-;17214:3;17235:67;17299:2;17294:3;17235:67;:::i;:::-;17228:74;;17311:93;17400:3;17311:93;:::i;:::-;17429:2;17424:3;17420:12;17413:19;;17072:366;;;:::o;17444:118::-;17531:24;17549:5;17531:24;:::i;:::-;17526:3;17519:37;17444:118;;:::o;17568:435::-;17748:3;17770:95;17861:3;17852:6;17770:95;:::i;:::-;17763:102;;17882:95;17973:3;17964:6;17882:95;:::i;:::-;17875:102;;17994:3;17987:10;;17568:435;;;;;:::o;18009:222::-;18102:4;18140:2;18129:9;18125:18;18117:26;;18153:71;18221:1;18210:9;18206:17;18197:6;18153:71;:::i;:::-;18009:222;;;;:::o;18237:640::-;18432:4;18470:3;18459:9;18455:19;18447:27;;18484:71;18552:1;18541:9;18537:17;18528:6;18484:71;:::i;:::-;18565:72;18633:2;18622:9;18618:18;18609:6;18565:72;:::i;:::-;18647;18715:2;18704:9;18700:18;18691:6;18647:72;:::i;:::-;18766:9;18760:4;18756:20;18751:2;18740:9;18736:18;18729:48;18794:76;18865:4;18856:6;18794:76;:::i;:::-;18786:84;;18237:640;;;;;;;:::o;18883:210::-;18970:4;19008:2;18997:9;18993:18;18985:26;;19021:65;19083:1;19072:9;19068:17;19059:6;19021:65;:::i;:::-;18883:210;;;;:::o;19099:313::-;19212:4;19250:2;19239:9;19235:18;19227:26;;19299:9;19293:4;19289:20;19285:1;19274:9;19270:17;19263:47;19327:78;19400:4;19391:6;19327:78;:::i;:::-;19319:86;;19099:313;;;;:::o;19418:419::-;19584:4;19622:2;19611:9;19607:18;19599:26;;19671:9;19665:4;19661:20;19657:1;19646:9;19642:17;19635:47;19699:131;19825:4;19699:131;:::i;:::-;19691:139;;19418:419;;;:::o;19843:::-;20009:4;20047:2;20036:9;20032:18;20024:26;;20096:9;20090:4;20086:20;20082:1;20071:9;20067:17;20060:47;20124:131;20250:4;20124:131;:::i;:::-;20116:139;;19843:419;;;:::o;20268:::-;20434:4;20472:2;20461:9;20457:18;20449:26;;20521:9;20515:4;20511:20;20507:1;20496:9;20492:17;20485:47;20549:131;20675:4;20549:131;:::i;:::-;20541:139;;20268:419;;;:::o;20693:::-;20859:4;20897:2;20886:9;20882:18;20874:26;;20946:9;20940:4;20936:20;20932:1;20921:9;20917:17;20910:47;20974:131;21100:4;20974:131;:::i;:::-;20966:139;;20693:419;;;:::o;21118:::-;21284:4;21322:2;21311:9;21307:18;21299:26;;21371:9;21365:4;21361:20;21357:1;21346:9;21342:17;21335:47;21399:131;21525:4;21399:131;:::i;:::-;21391:139;;21118:419;;;:::o;21543:::-;21709:4;21747:2;21736:9;21732:18;21724:26;;21796:9;21790:4;21786:20;21782:1;21771:9;21767:17;21760:47;21824:131;21950:4;21824:131;:::i;:::-;21816:139;;21543:419;;;:::o;21968:::-;22134:4;22172:2;22161:9;22157:18;22149:26;;22221:9;22215:4;22211:20;22207:1;22196:9;22192:17;22185:47;22249:131;22375:4;22249:131;:::i;:::-;22241:139;;21968:419;;;:::o;22393:::-;22559:4;22597:2;22586:9;22582:18;22574:26;;22646:9;22640:4;22636:20;22632:1;22621:9;22617:17;22610:47;22674:131;22800:4;22674:131;:::i;:::-;22666:139;;22393:419;;;:::o;22818:::-;22984:4;23022:2;23011:9;23007:18;22999:26;;23071:9;23065:4;23061:20;23057:1;23046:9;23042:17;23035:47;23099:131;23225:4;23099:131;:::i;:::-;23091:139;;22818:419;;;:::o;23243:::-;23409:4;23447:2;23436:9;23432:18;23424:26;;23496:9;23490:4;23486:20;23482:1;23471:9;23467:17;23460:47;23524:131;23650:4;23524:131;:::i;:::-;23516:139;;23243:419;;;:::o;23668:::-;23834:4;23872:2;23861:9;23857:18;23849:26;;23921:9;23915:4;23911:20;23907:1;23896:9;23892:17;23885:47;23949:131;24075:4;23949:131;:::i;:::-;23941:139;;23668:419;;;:::o;24093:::-;24259:4;24297:2;24286:9;24282:18;24274:26;;24346:9;24340:4;24336:20;24332:1;24321:9;24317:17;24310:47;24374:131;24500:4;24374:131;:::i;:::-;24366:139;;24093:419;;;:::o;24518:::-;24684:4;24722:2;24711:9;24707:18;24699:26;;24771:9;24765:4;24761:20;24757:1;24746:9;24742:17;24735:47;24799:131;24925:4;24799:131;:::i;:::-;24791:139;;24518:419;;;:::o;24943:::-;25109:4;25147:2;25136:9;25132:18;25124:26;;25196:9;25190:4;25186:20;25182:1;25171:9;25167:17;25160:47;25224:131;25350:4;25224:131;:::i;:::-;25216:139;;24943:419;;;:::o;25368:::-;25534:4;25572:2;25561:9;25557:18;25549:26;;25621:9;25615:4;25611:20;25607:1;25596:9;25592:17;25585:47;25649:131;25775:4;25649:131;:::i;:::-;25641:139;;25368:419;;;:::o;25793:::-;25959:4;25997:2;25986:9;25982:18;25974:26;;26046:9;26040:4;26036:20;26032:1;26021:9;26017:17;26010:47;26074:131;26200:4;26074:131;:::i;:::-;26066:139;;25793:419;;;:::o;26218:::-;26384:4;26422:2;26411:9;26407:18;26399:26;;26471:9;26465:4;26461:20;26457:1;26446:9;26442:17;26435:47;26499:131;26625:4;26499:131;:::i;:::-;26491:139;;26218:419;;;:::o;26643:::-;26809:4;26847:2;26836:9;26832:18;26824:26;;26896:9;26890:4;26886:20;26882:1;26871:9;26867:17;26860:47;26924:131;27050:4;26924:131;:::i;:::-;26916:139;;26643:419;;;:::o;27068:::-;27234:4;27272:2;27261:9;27257:18;27249:26;;27321:9;27315:4;27311:20;27307:1;27296:9;27292:17;27285:47;27349:131;27475:4;27349:131;:::i;:::-;27341:139;;27068:419;;;:::o;27493:::-;27659:4;27697:2;27686:9;27682:18;27674:26;;27746:9;27740:4;27736:20;27732:1;27721:9;27717:17;27710:47;27774:131;27900:4;27774:131;:::i;:::-;27766:139;;27493:419;;;:::o;27918:::-;28084:4;28122:2;28111:9;28107:18;28099:26;;28171:9;28165:4;28161:20;28157:1;28146:9;28142:17;28135:47;28199:131;28325:4;28199:131;:::i;:::-;28191:139;;27918:419;;;:::o;28343:::-;28509:4;28547:2;28536:9;28532:18;28524:26;;28596:9;28590:4;28586:20;28582:1;28571:9;28567:17;28560:47;28624:131;28750:4;28624:131;:::i;:::-;28616:139;;28343:419;;;:::o;28768:::-;28934:4;28972:2;28961:9;28957:18;28949:26;;29021:9;29015:4;29011:20;29007:1;28996:9;28992:17;28985:47;29049:131;29175:4;29049:131;:::i;:::-;29041:139;;28768:419;;;:::o;29193:::-;29359:4;29397:2;29386:9;29382:18;29374:26;;29446:9;29440:4;29436:20;29432:1;29421:9;29417:17;29410:47;29474:131;29600:4;29474:131;:::i;:::-;29466:139;;29193:419;;;:::o;29618:222::-;29711:4;29749:2;29738:9;29734:18;29726:26;;29762:71;29830:1;29819:9;29815:17;29806:6;29762:71;:::i;:::-;29618:222;;;;:::o;29846:129::-;29880:6;29907:20;;:::i;:::-;29897:30;;29936:33;29964:4;29956:6;29936:33;:::i;:::-;29846:129;;;:::o;29981:75::-;30014:6;30047:2;30041:9;30031:19;;29981:75;:::o;30062:307::-;30123:4;30213:18;30205:6;30202:30;30199:56;;;30235:18;;:::i;:::-;30199:56;30273:29;30295:6;30273:29;:::i;:::-;30265:37;;30357:4;30351;30347:15;30339:23;;30062:307;;;:::o;30375:308::-;30437:4;30527:18;30519:6;30516:30;30513:56;;;30549:18;;:::i;:::-;30513:56;30587:29;30609:6;30587:29;:::i;:::-;30579:37;;30671:4;30665;30661:15;30653:23;;30375:308;;;:::o;30689:98::-;30740:6;30774:5;30768:12;30758:22;;30689:98;;;:::o;30793:99::-;30845:6;30879:5;30873:12;30863:22;;30793:99;;;:::o;30898:168::-;30981:11;31015:6;31010:3;31003:19;31055:4;31050:3;31046:14;31031:29;;30898:168;;;;:::o;31072:169::-;31156:11;31190:6;31185:3;31178:19;31230:4;31225:3;31221:14;31206:29;;31072:169;;;;:::o;31247:148::-;31349:11;31386:3;31371:18;;31247:148;;;;:::o;31401:305::-;31441:3;31460:20;31478:1;31460:20;:::i;:::-;31455:25;;31494:20;31512:1;31494:20;:::i;:::-;31489:25;;31648:1;31580:66;31576:74;31573:1;31570:81;31567:107;;;31654:18;;:::i;:::-;31567:107;31698:1;31695;31691:9;31684:16;;31401:305;;;;:::o;31712:185::-;31752:1;31769:20;31787:1;31769:20;:::i;:::-;31764:25;;31803:20;31821:1;31803:20;:::i;:::-;31798:25;;31842:1;31832:35;;31847:18;;:::i;:::-;31832:35;31889:1;31886;31882:9;31877:14;;31712:185;;;;:::o;31903:348::-;31943:7;31966:20;31984:1;31966:20;:::i;:::-;31961:25;;32000:20;32018:1;32000:20;:::i;:::-;31995:25;;32188:1;32120:66;32116:74;32113:1;32110:81;32105:1;32098:9;32091:17;32087:105;32084:131;;;32195:18;;:::i;:::-;32084:131;32243:1;32240;32236:9;32225:20;;31903:348;;;;:::o;32257:191::-;32297:4;32317:20;32335:1;32317:20;:::i;:::-;32312:25;;32351:20;32369:1;32351:20;:::i;:::-;32346:25;;32390:1;32387;32384:8;32381:34;;;32395:18;;:::i;:::-;32381:34;32440:1;32437;32433:9;32425:17;;32257:191;;;;:::o;32454:96::-;32491:7;32520:24;32538:5;32520:24;:::i;:::-;32509:35;;32454:96;;;:::o;32556:90::-;32590:7;32633:5;32626:13;32619:21;32608:32;;32556:90;;;:::o;32652:149::-;32688:7;32728:66;32721:5;32717:78;32706:89;;32652:149;;;:::o;32807:126::-;32844:7;32884:42;32877:5;32873:54;32862:65;;32807:126;;;:::o;32939:77::-;32976:7;33005:5;32994:16;;32939:77;;;:::o;33022:154::-;33106:6;33101:3;33096;33083:30;33168:1;33159:6;33154:3;33150:16;33143:27;33022:154;;;:::o;33182:307::-;33250:1;33260:113;33274:6;33271:1;33268:13;33260:113;;;33359:1;33354:3;33350:11;33344:18;33340:1;33335:3;33331:11;33324:39;33296:2;33293:1;33289:10;33284:15;;33260:113;;;33391:6;33388:1;33385:13;33382:101;;;33471:1;33462:6;33457:3;33453:16;33446:27;33382:101;33231:258;33182:307;;;:::o;33495:320::-;33539:6;33576:1;33570:4;33566:12;33556:22;;33623:1;33617:4;33613:12;33644:18;33634:81;;33700:4;33692:6;33688:17;33678:27;;33634:81;33762:2;33754:6;33751:14;33731:18;33728:38;33725:84;;;33781:18;;:::i;:::-;33725:84;33546:269;33495:320;;;:::o;33821:281::-;33904:27;33926:4;33904:27;:::i;:::-;33896:6;33892:40;34034:6;34022:10;34019:22;33998:18;33986:10;33983:34;33980:62;33977:88;;;34045:18;;:::i;:::-;33977:88;34085:10;34081:2;34074:22;33864:238;33821:281;;:::o;34108:233::-;34147:3;34170:24;34188:5;34170:24;:::i;:::-;34161:33;;34216:66;34209:5;34206:77;34203:103;;;34286:18;;:::i;:::-;34203:103;34333:1;34326:5;34322:13;34315:20;;34108:233;;;:::o;34347:176::-;34379:1;34396:20;34414:1;34396:20;:::i;:::-;34391:25;;34430:20;34448:1;34430:20;:::i;:::-;34425:25;;34469:1;34459:35;;34474:18;;:::i;:::-;34459:35;34515:1;34512;34508:9;34503:14;;34347:176;;;;:::o;34529:180::-;34577:77;34574:1;34567:88;34674:4;34671:1;34664:15;34698:4;34695:1;34688:15;34715:180;34763:77;34760:1;34753:88;34860:4;34857:1;34850:15;34884:4;34881:1;34874:15;34901:180;34949:77;34946:1;34939:88;35046:4;35043:1;35036:15;35070:4;35067:1;35060:15;35087:180;35135:77;35132:1;35125:88;35232:4;35229:1;35222:15;35256:4;35253:1;35246:15;35273:180;35321:77;35318:1;35311:88;35418:4;35415:1;35408:15;35442:4;35439:1;35432:15;35459:180;35507:77;35504:1;35497:88;35604:4;35601:1;35594:15;35628:4;35625:1;35618:15;35645:117;35754:1;35751;35744:12;35768:117;35877:1;35874;35867:12;35891:117;36000:1;35997;35990:12;36014:117;36123:1;36120;36113:12;36137:102;36178:6;36229:2;36225:7;36220:2;36213:5;36209:14;36205:28;36195:38;;36137:102;;;:::o;36245:170::-;36385:22;36381:1;36373:6;36369:14;36362:46;36245:170;:::o;36421:165::-;36561:17;36557:1;36549:6;36545:14;36538:41;36421:165;:::o;36592:230::-;36732:34;36728:1;36720:6;36716:14;36709:58;36801:13;36796:2;36788:6;36784:15;36777:38;36592:230;:::o;36828:237::-;36968:34;36964:1;36956:6;36952:14;36945:58;37037:20;37032:2;37024:6;37020:15;37013:45;36828:237;:::o;37071:225::-;37211:34;37207:1;37199:6;37195:14;37188:58;37280:8;37275:2;37267:6;37263:15;37256:33;37071:225;:::o;37302:178::-;37442:30;37438:1;37430:6;37426:14;37419:54;37302:178;:::o;37486:223::-;37626:34;37622:1;37614:6;37610:14;37603:58;37695:6;37690:2;37682:6;37678:15;37671:31;37486:223;:::o;37715:175::-;37855:27;37851:1;37843:6;37839:14;37832:51;37715:175;:::o;37896:231::-;38036:34;38032:1;38024:6;38020:14;38013:58;38105:14;38100:2;38092:6;38088:15;38081:39;37896:231;:::o;38133:166::-;38273:18;38269:1;38261:6;38257:14;38250:42;38133:166;:::o;38305:243::-;38445:34;38441:1;38433:6;38429:14;38422:58;38514:26;38509:2;38501:6;38497:15;38490:51;38305:243;:::o;38554:229::-;38694:34;38690:1;38682:6;38678:14;38671:58;38763:12;38758:2;38750:6;38746:15;38739:37;38554:229;:::o;38789:228::-;38929:34;38925:1;38917:6;38913:14;38906:58;38998:11;38993:2;38985:6;38981:15;38974:36;38789:228;:::o;39023:182::-;39163:34;39159:1;39151:6;39147:14;39140:58;39023:182;:::o;39211:236::-;39351:34;39347:1;39339:6;39335:14;39328:58;39420:19;39415:2;39407:6;39403:15;39396:44;39211:236;:::o;39453:231::-;39593:34;39589:1;39581:6;39577:14;39570:58;39662:14;39657:2;39649:6;39645:15;39638:39;39453:231;:::o;39690:182::-;39830:34;39826:1;39818:6;39814:14;39807:58;39690:182;:::o;39878:228::-;40018:34;40014:1;40006:6;40002:14;39995:58;40087:11;40082:2;40074:6;40070:15;40063:36;39878:228;:::o;40112:234::-;40252:34;40248:1;40240:6;40236:14;40229:58;40321:17;40316:2;40308:6;40304:15;40297:42;40112:234;:::o;40352:220::-;40492:34;40488:1;40480:6;40476:14;40469:58;40561:3;40556:2;40548:6;40544:15;40537:28;40352:220;:::o;40578:169::-;40718:21;40714:1;40706:6;40702:14;40695:45;40578:169;:::o;40753:236::-;40893:34;40889:1;40881:6;40877:14;40870:58;40962:19;40957:2;40949:6;40945:15;40938:44;40753:236;:::o;40995:231::-;41135:34;41131:1;41123:6;41119:14;41112:58;41204:14;41199:2;41191:6;41187:15;41180:39;40995:231;:::o;41232:235::-;41372:34;41368:1;41360:6;41356:14;41349:58;41441:18;41436:2;41428:6;41424:15;41417:43;41232:235;:::o;41473:122::-;41546:24;41564:5;41546:24;:::i;:::-;41539:5;41536:35;41526:63;;41585:1;41582;41575:12;41526:63;41473:122;:::o;41601:116::-;41671:21;41686:5;41671:21;:::i;:::-;41664:5;41661:32;41651:60;;41707:1;41704;41697:12;41651:60;41601:116;:::o;41723:120::-;41795:23;41812:5;41795:23;:::i;:::-;41788:5;41785:34;41775:62;;41833:1;41830;41823:12;41775:62;41723:120;:::o;41849:122::-;41922:24;41940:5;41922:24;:::i;:::-;41915:5;41912:35;41902:63;;41961:1;41958;41951:12;41902:63;41849:122;:::o
Swarm Source
ipfs://3c46e67bee0c87c7abe33dfe5d47e0ef3967efb593f32133ccd5decc0406fed3
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Validator ID :
0 FTM
Amount Staked
0
Amount Delegated
0
Staking Total
0
Staking Start Epoch
0
Staking Start Time
0
Proof of Importance
0
Origination Score
0
Validation Score
0
Active
0
Online
0
Downtime
0 s
Address | Amount | claimed Rewards | Created On Epoch | Created On |
---|