Polygon Sponsored slots available. Book your slot here!
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 2,045 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 60655681 | 112 days ago | IN | 0 POL | 0.00081882 | ||||
Set Approval For... | 60586721 | 114 days ago | IN | 0 POL | 0.00081882 | ||||
Safe Transfer Fr... | 54554992 | 269 days ago | IN | 0 POL | 0.00730196 | ||||
Set Approval For... | 54441569 | 272 days ago | IN | 0 POL | 0.00517715 | ||||
Safe Transfer Fr... | 54373523 | 274 days ago | IN | 0 POL | 0.01275079 | ||||
Safe Transfer Fr... | 54373520 | 274 days ago | IN | 0 POL | 0.01294925 | ||||
Set Approval For... | 53718513 | 290 days ago | IN | 0 POL | 0.00302175 | ||||
Set Approval For... | 53065481 | 307 days ago | IN | 0 POL | 0.00192221 | ||||
Transfer From | 51939550 | 336 days ago | IN | 0 POL | 0.00574709 | ||||
Safe Transfer Fr... | 48523200 | 423 days ago | IN | 0 POL | 0.00303902 | ||||
Set Approval For... | 48523105 | 423 days ago | IN | 0 POL | 0.00296212 | ||||
Set Approval For... | 48284643 | 429 days ago | IN | 0 POL | 0.00306933 | ||||
Safe Transfer Fr... | 46707759 | 469 days ago | IN | 0 POL | 0.00434543 | ||||
Set Approval For... | 46262045 | 481 days ago | IN | 0 POL | 0.00364758 | ||||
Set Approval For... | 46185511 | 482 days ago | IN | 0 POL | 0.00597956 | ||||
Set Approval For... | 45901808 | 490 days ago | IN | 0 POL | 0.00474992 | ||||
Set Approval For... | 45294645 | 505 days ago | IN | 0 POL | 0.00521738 | ||||
Set Approval For... | 44263414 | 531 days ago | IN | 0 POL | 0.00867781 | ||||
Set Approval For... | 43835601 | 542 days ago | IN | 0 POL | 0.01102546 | ||||
Set Approval For... | 43813956 | 543 days ago | IN | 0 POL | 0.00766551 | ||||
DOMAI Nedit | 43724933 | 545 days ago | IN | 1 POL | 0.01988694 | ||||
Set Approval For... | 43095672 | 562 days ago | IN | 0 POL | 0.00630519 | ||||
Set Approval For... | 43095641 | 562 days ago | IN | 0 POL | 0.00546187 | ||||
Set Approval For... | 43095600 | 562 days ago | IN | 0 POL | 0.00640386 | ||||
Set Approval For... | 43022530 | 563 days ago | IN | 0 POL | 0.00708475 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
43724933 | 545 days ago | 1 POL | ||||
38145521 | 690 days ago | 1 POL | ||||
38145141 | 690 days ago | 1 POL | ||||
36057639 | 741 days ago | 1 POL | ||||
36054006 | 742 days ago | 1 POL | ||||
36053989 | 742 days ago | 1 POL | ||||
35671274 | 751 days ago | 1 POL | ||||
35671259 | 751 days ago | 1 POL | ||||
35650171 | 751 days ago | 1 POL | ||||
35650171 | 751 days ago | 1 POL | ||||
35615320 | 752 days ago | 1 POL | ||||
35615320 | 752 days ago | 1 POL | ||||
35413335 | 757 days ago | 1 POL | ||||
35413335 | 757 days ago | 1 POL | ||||
35413332 | 757 days ago | 1 POL | ||||
35413332 | 757 days ago | 1 POL | ||||
35413329 | 757 days ago | 1 POL | ||||
35413329 | 757 days ago | 1 POL | ||||
35413326 | 757 days ago | 1 POL | ||||
35413326 | 757 days ago | 1 POL | ||||
35413324 | 757 days ago | 1 POL | ||||
35413324 | 757 days ago | 1 POL | ||||
35413321 | 757 days ago | 1 POL | ||||
35413321 | 757 days ago | 1 POL | ||||
35413319 | 757 days ago | 1 POL |
Loading...
Loading
Contract Name:
REKTDomain
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-10-04 */ // ___ ___ ___ ___ // /\ \ /\ \ /\__\ /\ \ // /::\ \ /::\ \ /:/ / \:\ \ // /:/\:\ \ /:/\:\ \ /:/__/ \:\ \ // /::\~\:\ \ /::\~\:\ \ /::\__\____ /::\ \ // /:/\:\ \:\__\ /:/\:\ \:\__\ /:/\:::::\__\ /:/\:\__\ // \/_|::\/:/ / \:\~\:\ \/__/ \/_|:|~~|~ /:/ \/__/ // |:|::/ / \:\ \:\__\ |:| | /:/ / // |:|\/__/ \:\ \/__/ |:| | \/__/ // |:| | \:\__\ |:| | // \|__| \/__/ \|__| // // // www.REKT.al // // REKT DOMAINS // // your everlasting decentralized domain name // // register once and hold forever, no renewal fees, no timeout // // each domain is tradeable as an erc721 NFT // // each domain can be reached via classic web www.example.REKT.AL // // create/mint a domain by calling DOMAINedit(); with 10 matic // // if you already own the domain you can call DOMAINedit(); with 0 ether to update its url // // // get a domains URL by calling DOMAINurl(); with domain name // get a domains owner by calling DOMAINowner(); with domain name // get a domain name by calling DOMAIN(); with erc721 tokenId // // // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol 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) internal _owners; // Mapping owner address to token count mapping(address => uint256) internal _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { 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.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: rektdomain.sol pragma solidity ^0.8.0; // ___ ___ ___ ___ // /\ \ /\ \ /\__\ /\ \ // /::\ \ /::\ \ /:/ / \:\ \ // /:/\:\ \ /:/\:\ \ /:/__/ \:\ \ // /::\~\:\ \ /::\~\:\ \ /::\__\____ /::\ \ // /:/\:\ \:\__\ /:/\:\ \:\__\ /:/\:::::\__\ /:/\:\__\ // \/_|::\/:/ / \:\~\:\ \/__/ \/_|:|~~|~ /:/ \/__/ // |:|::/ / \:\ \:\__\ |:| | /:/ / // |:|\/__/ \:\ \/__/ |:| | \/__/ // |:| | \:\__\ |:| | // \|__| \/__/ \|__| // // // www.REKT.al // // REKT DOMAINS // // your everlasting decentralized domain name // // register once and hold forever, no renewal fees, no timeout // // each domain is tradeable as an erc721 NFT // // each domain can be reached via classic web www.example.REKT.AL // // create/mint a domain by calling DOMAINedit(); with 10 matic // // if you already own the domain you can call DOMAINedit(); with 0 ether to update its url // // // get a domains URL by calling DOMAINurl(); with domain name // get a domains owner by calling DOMAINowner(); with domain name // get a domain name by calling DOMAIN(); with erc721 tokenId // // contract REKTDomain is ERC721 { address donation = 0x719D5F7725a8A8BC92C31552D6e057759Dc935B8; mapping(uint256 => string) public urls; mapping(uint256 => string) public domain; string public JSONURI ="http://www.rekt.al/domain/?"; function DOMAINedit(string memory _domain, string memory _url) public payable returns (uint256) { bool doit = false; payable(donation).transfer(msg.value); uint256 domhash = uint256(keccak256(abi.encodePacked(_domain))); if(_owners[domhash]==address(0)){ if(msg.value >= 1e18){ doit = true;} } else { if(_owners[domhash] == msg.sender){ doit = true;} } if(doit){ urls[domhash] = _url; domain[domhash] = _domain; _balances[msg.sender] += 1; _owners[domhash] = msg.sender; emit Transfer(address(0), msg.sender, domhash); return domhash; } } function DOMAINurl(string memory _domain) public view returns (string memory) { uint256 domhash = uint256(keccak256(abi.encodePacked(_domain))); return urls[domhash]; } function DOMAINowner(string memory _domain) public view returns (address) { uint256 domhash = uint256(keccak256(abi.encodePacked(_domain))); return _owners[domhash]; } function DOMAIN(uint256 tokenid) public view returns (string memory) { return domain[tokenid]; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); return string(abi.encodePacked(JSONURI, domain[tokenId])); } constructor() ERC721("REKT DOMAIN", "REKT") {} }
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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenid","type":"uint256"}],"name":"DOMAIN","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_domain","type":"string"},{"internalType":"string","name":"_url","type":"string"}],"name":"DOMAINedit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"_domain","type":"string"}],"name":"DOMAINowner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_domain","type":"string"}],"name":"DOMAINurl","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"JSONURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"domain","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"urls","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405273719d5f7725a8a8bc92c31552d6e057759dc935b8600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280601b81526020017f687474703a2f2f7777772e72656b742e616c2f646f6d61696e2f3f000000000081525060099080519060200190620000a69291906200015b565b50348015620000b457600080fd5b506040518060400160405280600b81526020017f52454b5420444f4d41494e0000000000000000000000000000000000000000008152506040518060400160405280600481526020017f52454b54000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001399291906200015b565b508060019080519060200190620001529291906200015b565b50505062000270565b82805462000169906200020b565b90600052602060002090601f0160209004810192826200018d5760008555620001d9565b82601f10620001a857805160ff1916838001178555620001d9565b82800160010185558215620001d9579182015b82811115620001d8578251825591602001919060010190620001bb565b5b509050620001e89190620001ec565b5090565b5b8082111562000207576000816000905550600101620001ed565b5090565b600060028204905060018216806200022457607f821691505b602082108114156200023b576200023a62000241565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612d0b80620002806000396000f3fe60806040526004361061011f5760003560e01c8063796676be116100a0578063b88d4fde11610064578063b88d4fde14610436578063bc29387f1461045f578063c00ec1f41461049c578063c87b56dd146104c7578063e985e9c5146105045761011f565b8063796676be1461032b57806395d89b4114610368578063a22cb46514610393578063a3f54110146103bc578063b4210e42146103f95761011f565b806327b35ed6116100e757806327b35ed61461021b57806342842e0e146102585780635139ca9e146102815780636352211e146102b157806370a08231146102ee5761011f565b806301ffc9a71461012457806306fdde0314610161578063081812fc1461018c578063095ea7b3146101c957806323b872dd146101f2575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190611f02565b610541565b60405161015891906123df565b60405180910390f35b34801561016d57600080fd5b50610176610623565b60405161018391906123fa565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae919061201d565b6106b5565b6040516101c09190612378565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190611ec2565b61073a565b005b3480156101fe57600080fd5b5061021960048036038101906102149190611dac565b610852565b005b34801561022757600080fd5b50610242600480360381019061023d919061201d565b6108b2565b60405161024f91906123fa565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190611dac565b610957565b005b61029b60048036038101906102969190611fa5565b610977565b6040516102a8919061259c565b60405180910390f35b3480156102bd57600080fd5b506102d860048036038101906102d3919061201d565b610c71565b6040516102e59190612378565b60405180910390f35b3480156102fa57600080fd5b5061031560048036038101906103109190611d3f565b610d23565b604051610322919061259c565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d919061201d565b610ddb565b60405161035f91906123fa565b60405180910390f35b34801561037457600080fd5b5061037d610e7b565b60405161038a91906123fa565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b59190611e82565b610f0d565b005b3480156103c857600080fd5b506103e360048036038101906103de9190611f5c565b61108e565b6040516103f091906123fa565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190611f5c565b611162565b60405161042d9190612378565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190611dff565b6111cd565b005b34801561046b57600080fd5b506104866004803603810190610481919061201d565b61122f565b60405161049391906123fa565b60405180910390f35b3480156104a857600080fd5b506104b16112cf565b6040516104be91906123fa565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e9919061201d565b61135d565b6040516104fb91906123fa565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190611d6c565b6113e3565b60405161053891906123df565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061060c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061061c575061061b82611477565b5b9050919050565b606060008054610632906127d6565b80601f016020809104026020016040519081016040528092919081815260200182805461065e906127d6565b80156106ab5780601f10610680576101008083540402835291602001916106ab565b820191906000526020600020905b81548152906001019060200180831161068e57829003601f168201915b5050505050905090565b60006106c0826114e1565b6106ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f6906124fc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061074582610c71565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ad9061255c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107d561154d565b73ffffffffffffffffffffffffffffffffffffffff1614806108045750610803816107fe61154d565b6113e3565b5b610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a9061249c565b60405180910390fd5b61084d8383611555565b505050565b61086361085d61154d565b8261160e565b6108a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108999061257c565b60405180910390fd5b6108ad8383836116ec565b505050565b60606008600083815260200190815260200160002080546108d2906127d6565b80601f01602080910402602001604051908101604052809291908181526020018280546108fe906127d6565b801561094b5780601f106109205761010080835404028352916020019161094b565b820191906000526020600020905b81548152906001019060200180831161092e57829003601f168201915b50505050509050919050565b610972838383604051806020016040528060008152506111cd565b505050565b60008060009050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156109e6573d6000803e3d6000fd5b506000846040516020016109fa919061233d565b6040516020818303038152906040528051906020012060001c9050600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610a9657670de0b6b3a76400003410610a9157600191505b610b03565b3373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610b0257600191505b5b8115610c685783600760008381526020019081526020016000209080519060200190610b30929190611b53565b5084600860008381526020019081526020016000209080519060200190610b58929190611b53565b506001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ba99190612696565b92505081905550336002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550803373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48092505050610c6b565b50505b92915050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d11906124dc565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b906124bc565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60076020528060005260406000206000915090508054610dfa906127d6565b80601f0160208091040260200160405190810160405280929190818152602001828054610e26906127d6565b8015610e735780601f10610e4857610100808354040283529160200191610e73565b820191906000526020600020905b815481529060010190602001808311610e5657829003601f168201915b505050505081565b606060018054610e8a906127d6565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb6906127d6565b8015610f035780601f10610ed857610100808354040283529160200191610f03565b820191906000526020600020905b815481529060010190602001808311610ee657829003601f168201915b5050505050905090565b610f1561154d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a9061245c565b60405180910390fd5b8060056000610f9061154d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661103d61154d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161108291906123df565b60405180910390a35050565b60606000826040516020016110a3919061233d565b6040516020818303038152906040528051906020012060001c90506007600082815260200190815260200160002080546110dc906127d6565b80601f0160208091040260200160405190810160405280929190818152602001828054611108906127d6565b80156111555780601f1061112a57610100808354040283529160200191611155565b820191906000526020600020905b81548152906001019060200180831161113857829003601f168201915b5050505050915050919050565b60008082604051602001611176919061233d565b6040516020818303038152906040528051906020012060001c90506002600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6111de6111d861154d565b8361160e565b61121d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112149061257c565b60405180910390fd5b61122984848484611948565b50505050565b6008602052806000526040600020600091509050805461124e906127d6565b80601f016020809104026020016040519081016040528092919081815260200182805461127a906127d6565b80156112c75780601f1061129c576101008083540402835291602001916112c7565b820191906000526020600020905b8154815290600101906020018083116112aa57829003601f168201915b505050505081565b600980546112dc906127d6565b80601f0160208091040260200160405190810160405280929190818152602001828054611308906127d6565b80156113555780601f1061132a57610100808354040283529160200191611355565b820191906000526020600020905b81548152906001019060200180831161133857829003601f168201915b505050505081565b6060611368826114e1565b6113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e9061253c565b60405180910390fd5b6009600860008481526020019081526020016000206040516020016113cd929190612354565b6040516020818303038152906040529050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166115c883610c71565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611619826114e1565b611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f9061247c565b60405180910390fd5b600061166383610c71565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116d257508373ffffffffffffffffffffffffffffffffffffffff166116ba846106b5565b73ffffffffffffffffffffffffffffffffffffffff16145b806116e357506116e281856113e3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661170c82610c71565b73ffffffffffffffffffffffffffffffffffffffff1614611762576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117599061251c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c99061243c565b60405180910390fd5b6117dd8383836119a4565b6117e8600082611555565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461183891906126ec565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461188f9190612696565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6119538484846116ec565b61195f848484846119a9565b61199e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119959061241c565b60405180910390fd5b50505050565b505050565b60006119ca8473ffffffffffffffffffffffffffffffffffffffff16611b40565b15611b33578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026119f361154d565b8786866040518563ffffffff1660e01b8152600401611a159493929190612393565b602060405180830381600087803b158015611a2f57600080fd5b505af1925050508015611a6057506040513d601f19601f82011682018060405250810190611a5d9190611f2f565b60015b611ae3573d8060008114611a90576040519150601f19603f3d011682016040523d82523d6000602084013e611a95565b606091505b50600081511415611adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad29061241c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b38565b600190505b949350505050565b600080823b905060008111915050919050565b828054611b5f906127d6565b90600052602060002090601f016020900481019282611b815760008555611bc8565b82601f10611b9a57805160ff1916838001178555611bc8565b82800160010185558215611bc8579182015b82811115611bc7578251825591602001919060010190611bac565b5b509050611bd59190611bd9565b5090565b5b80821115611bf2576000816000905550600101611bda565b5090565b6000611c09611c04846125dc565b6125b7565b905082815260208101848484011115611c2557611c246128cb565b5b611c30848285612794565b509392505050565b6000611c4b611c468461260d565b6125b7565b905082815260208101848484011115611c6757611c666128cb565b5b611c72848285612794565b509392505050565b600081359050611c8981612c79565b92915050565b600081359050611c9e81612c90565b92915050565b600081359050611cb381612ca7565b92915050565b600081519050611cc881612ca7565b92915050565b600082601f830112611ce357611ce26128c6565b5b8135611cf3848260208601611bf6565b91505092915050565b600082601f830112611d1157611d106128c6565b5b8135611d21848260208601611c38565b91505092915050565b600081359050611d3981612cbe565b92915050565b600060208284031215611d5557611d546128d5565b5b6000611d6384828501611c7a565b91505092915050565b60008060408385031215611d8357611d826128d5565b5b6000611d9185828601611c7a565b9250506020611da285828601611c7a565b9150509250929050565b600080600060608486031215611dc557611dc46128d5565b5b6000611dd386828701611c7a565b9350506020611de486828701611c7a565b9250506040611df586828701611d2a565b9150509250925092565b60008060008060808587031215611e1957611e186128d5565b5b6000611e2787828801611c7a565b9450506020611e3887828801611c7a565b9350506040611e4987828801611d2a565b925050606085013567ffffffffffffffff811115611e6a57611e696128d0565b5b611e7687828801611cce565b91505092959194509250565b60008060408385031215611e9957611e986128d5565b5b6000611ea785828601611c7a565b9250506020611eb885828601611c8f565b9150509250929050565b60008060408385031215611ed957611ed86128d5565b5b6000611ee785828601611c7a565b9250506020611ef885828601611d2a565b9150509250929050565b600060208284031215611f1857611f176128d5565b5b6000611f2684828501611ca4565b91505092915050565b600060208284031215611f4557611f446128d5565b5b6000611f5384828501611cb9565b91505092915050565b600060208284031215611f7257611f716128d5565b5b600082013567ffffffffffffffff811115611f9057611f8f6128d0565b5b611f9c84828501611cfc565b91505092915050565b60008060408385031215611fbc57611fbb6128d5565b5b600083013567ffffffffffffffff811115611fda57611fd96128d0565b5b611fe685828601611cfc565b925050602083013567ffffffffffffffff811115612007576120066128d0565b5b61201385828601611cfc565b9150509250929050565b600060208284031215612033576120326128d5565b5b600061204184828501611d2a565b91505092915050565b61205381612720565b82525050565b61206281612732565b82525050565b600061207382612653565b61207d8185612669565b935061208d8185602086016127a3565b612096816128da565b840191505092915050565b60006120ac8261265e565b6120b6818561267a565b93506120c68185602086016127a3565b6120cf816128da565b840191505092915050565b60006120e58261265e565b6120ef818561268b565b93506120ff8185602086016127a3565b80840191505092915050565b60008154612118816127d6565b612122818661268b565b9450600182166000811461213d576001811461214e57612181565b60ff19831686528186019350612181565b6121578561263e565b60005b838110156121795781548189015260018201915060208101905061215a565b838801955050505b50505092915050565b600061219760328361267a565b91506121a2826128eb565b604082019050919050565b60006121ba60248361267a565b91506121c58261293a565b604082019050919050565b60006121dd60198361267a565b91506121e882612989565b602082019050919050565b6000612200602c8361267a565b915061220b826129b2565b604082019050919050565b600061222360388361267a565b915061222e82612a01565b604082019050919050565b6000612246602a8361267a565b915061225182612a50565b604082019050919050565b600061226960298361267a565b915061227482612a9f565b604082019050919050565b600061228c602c8361267a565b915061229782612aee565b604082019050919050565b60006122af60298361267a565b91506122ba82612b3d565b604082019050919050565b60006122d2602f8361267a565b91506122dd82612b8c565b604082019050919050565b60006122f560218361267a565b915061230082612bdb565b604082019050919050565b600061231860318361267a565b915061232382612c2a565b604082019050919050565b6123378161278a565b82525050565b600061234982846120da565b915081905092915050565b6000612360828561210b565b915061236c828461210b565b91508190509392505050565b600060208201905061238d600083018461204a565b92915050565b60006080820190506123a8600083018761204a565b6123b5602083018661204a565b6123c2604083018561232e565b81810360608301526123d48184612068565b905095945050505050565b60006020820190506123f46000830184612059565b92915050565b6000602082019050818103600083015261241481846120a1565b905092915050565b600060208201905081810360008301526124358161218a565b9050919050565b60006020820190508181036000830152612455816121ad565b9050919050565b60006020820190508181036000830152612475816121d0565b9050919050565b60006020820190508181036000830152612495816121f3565b9050919050565b600060208201905081810360008301526124b581612216565b9050919050565b600060208201905081810360008301526124d581612239565b9050919050565b600060208201905081810360008301526124f58161225c565b9050919050565b600060208201905081810360008301526125158161227f565b9050919050565b60006020820190508181036000830152612535816122a2565b9050919050565b60006020820190508181036000830152612555816122c5565b9050919050565b60006020820190508181036000830152612575816122e8565b9050919050565b600060208201905081810360008301526125958161230b565b9050919050565b60006020820190506125b1600083018461232e565b92915050565b60006125c16125d2565b90506125cd8282612808565b919050565b6000604051905090565b600067ffffffffffffffff8211156125f7576125f6612897565b5b612600826128da565b9050602081019050919050565b600067ffffffffffffffff82111561262857612627612897565b5b612631826128da565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006126a18261278a565b91506126ac8361278a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126e1576126e0612839565b5b828201905092915050565b60006126f78261278a565b91506127028361278a565b92508282101561271557612714612839565b5b828203905092915050565b600061272b8261276a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156127c15780820151818401526020810190506127a6565b838111156127d0576000848401525b50505050565b600060028204905060018216806127ee57607f821691505b6020821081141561280257612801612868565b5b50919050565b612811826128da565b810181811067ffffffffffffffff821117156128305761282f612897565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b612c8281612720565b8114612c8d57600080fd5b50565b612c9981612732565b8114612ca457600080fd5b50565b612cb08161273e565b8114612cbb57600080fd5b50565b612cc78161278a565b8114612cd257600080fd5b5056fea26469706673582212202c912216dee4ef8bb9630f2f0ed0b7703345ecffe99ea3ad224099d823d901b164736f6c63430008070033
Deployed Bytecode
0x60806040526004361061011f5760003560e01c8063796676be116100a0578063b88d4fde11610064578063b88d4fde14610436578063bc29387f1461045f578063c00ec1f41461049c578063c87b56dd146104c7578063e985e9c5146105045761011f565b8063796676be1461032b57806395d89b4114610368578063a22cb46514610393578063a3f54110146103bc578063b4210e42146103f95761011f565b806327b35ed6116100e757806327b35ed61461021b57806342842e0e146102585780635139ca9e146102815780636352211e146102b157806370a08231146102ee5761011f565b806301ffc9a71461012457806306fdde0314610161578063081812fc1461018c578063095ea7b3146101c957806323b872dd146101f2575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190611f02565b610541565b60405161015891906123df565b60405180910390f35b34801561016d57600080fd5b50610176610623565b60405161018391906123fa565b60405180910390f35b34801561019857600080fd5b506101b360048036038101906101ae919061201d565b6106b5565b6040516101c09190612378565b60405180910390f35b3480156101d557600080fd5b506101f060048036038101906101eb9190611ec2565b61073a565b005b3480156101fe57600080fd5b5061021960048036038101906102149190611dac565b610852565b005b34801561022757600080fd5b50610242600480360381019061023d919061201d565b6108b2565b60405161024f91906123fa565b60405180910390f35b34801561026457600080fd5b5061027f600480360381019061027a9190611dac565b610957565b005b61029b60048036038101906102969190611fa5565b610977565b6040516102a8919061259c565b60405180910390f35b3480156102bd57600080fd5b506102d860048036038101906102d3919061201d565b610c71565b6040516102e59190612378565b60405180910390f35b3480156102fa57600080fd5b5061031560048036038101906103109190611d3f565b610d23565b604051610322919061259c565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d919061201d565b610ddb565b60405161035f91906123fa565b60405180910390f35b34801561037457600080fd5b5061037d610e7b565b60405161038a91906123fa565b60405180910390f35b34801561039f57600080fd5b506103ba60048036038101906103b59190611e82565b610f0d565b005b3480156103c857600080fd5b506103e360048036038101906103de9190611f5c565b61108e565b6040516103f091906123fa565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190611f5c565b611162565b60405161042d9190612378565b60405180910390f35b34801561044257600080fd5b5061045d60048036038101906104589190611dff565b6111cd565b005b34801561046b57600080fd5b506104866004803603810190610481919061201d565b61122f565b60405161049391906123fa565b60405180910390f35b3480156104a857600080fd5b506104b16112cf565b6040516104be91906123fa565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e9919061201d565b61135d565b6040516104fb91906123fa565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190611d6c565b6113e3565b60405161053891906123df565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061060c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061061c575061061b82611477565b5b9050919050565b606060008054610632906127d6565b80601f016020809104026020016040519081016040528092919081815260200182805461065e906127d6565b80156106ab5780601f10610680576101008083540402835291602001916106ab565b820191906000526020600020905b81548152906001019060200180831161068e57829003601f168201915b5050505050905090565b60006106c0826114e1565b6106ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f6906124fc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061074582610c71565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ad9061255c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107d561154d565b73ffffffffffffffffffffffffffffffffffffffff1614806108045750610803816107fe61154d565b6113e3565b5b610843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083a9061249c565b60405180910390fd5b61084d8383611555565b505050565b61086361085d61154d565b8261160e565b6108a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108999061257c565b60405180910390fd5b6108ad8383836116ec565b505050565b60606008600083815260200190815260200160002080546108d2906127d6565b80601f01602080910402602001604051908101604052809291908181526020018280546108fe906127d6565b801561094b5780601f106109205761010080835404028352916020019161094b565b820191906000526020600020905b81548152906001019060200180831161092e57829003601f168201915b50505050509050919050565b610972838383604051806020016040528060008152506111cd565b505050565b60008060009050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f193505050501580156109e6573d6000803e3d6000fd5b506000846040516020016109fa919061233d565b6040516020818303038152906040528051906020012060001c9050600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610a9657670de0b6b3a76400003410610a9157600191505b610b03565b3373ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610b0257600191505b5b8115610c685783600760008381526020019081526020016000209080519060200190610b30929190611b53565b5084600860008381526020019081526020016000209080519060200190610b58929190611b53565b506001600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ba99190612696565b92505081905550336002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550803373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48092505050610c6b565b50505b92915050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d11906124dc565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8b906124bc565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60076020528060005260406000206000915090508054610dfa906127d6565b80601f0160208091040260200160405190810160405280929190818152602001828054610e26906127d6565b8015610e735780601f10610e4857610100808354040283529160200191610e73565b820191906000526020600020905b815481529060010190602001808311610e5657829003601f168201915b505050505081565b606060018054610e8a906127d6565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb6906127d6565b8015610f035780601f10610ed857610100808354040283529160200191610f03565b820191906000526020600020905b815481529060010190602001808311610ee657829003601f168201915b5050505050905090565b610f1561154d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7a9061245c565b60405180910390fd5b8060056000610f9061154d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661103d61154d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161108291906123df565b60405180910390a35050565b60606000826040516020016110a3919061233d565b6040516020818303038152906040528051906020012060001c90506007600082815260200190815260200160002080546110dc906127d6565b80601f0160208091040260200160405190810160405280929190818152602001828054611108906127d6565b80156111555780601f1061112a57610100808354040283529160200191611155565b820191906000526020600020905b81548152906001019060200180831161113857829003601f168201915b5050505050915050919050565b60008082604051602001611176919061233d565b6040516020818303038152906040528051906020012060001c90506002600082815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915050919050565b6111de6111d861154d565b8361160e565b61121d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112149061257c565b60405180910390fd5b61122984848484611948565b50505050565b6008602052806000526040600020600091509050805461124e906127d6565b80601f016020809104026020016040519081016040528092919081815260200182805461127a906127d6565b80156112c75780601f1061129c576101008083540402835291602001916112c7565b820191906000526020600020905b8154815290600101906020018083116112aa57829003601f168201915b505050505081565b600980546112dc906127d6565b80601f0160208091040260200160405190810160405280929190818152602001828054611308906127d6565b80156113555780601f1061132a57610100808354040283529160200191611355565b820191906000526020600020905b81548152906001019060200180831161133857829003601f168201915b505050505081565b6060611368826114e1565b6113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e9061253c565b60405180910390fd5b6009600860008481526020019081526020016000206040516020016113cd929190612354565b6040516020818303038152906040529050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166115c883610c71565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611619826114e1565b611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f9061247c565b60405180910390fd5b600061166383610c71565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116d257508373ffffffffffffffffffffffffffffffffffffffff166116ba846106b5565b73ffffffffffffffffffffffffffffffffffffffff16145b806116e357506116e281856113e3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661170c82610c71565b73ffffffffffffffffffffffffffffffffffffffff1614611762576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117599061251c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c99061243c565b60405180910390fd5b6117dd8383836119a4565b6117e8600082611555565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461183891906126ec565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461188f9190612696565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6119538484846116ec565b61195f848484846119a9565b61199e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119959061241c565b60405180910390fd5b50505050565b505050565b60006119ca8473ffffffffffffffffffffffffffffffffffffffff16611b40565b15611b33578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026119f361154d565b8786866040518563ffffffff1660e01b8152600401611a159493929190612393565b602060405180830381600087803b158015611a2f57600080fd5b505af1925050508015611a6057506040513d601f19601f82011682018060405250810190611a5d9190611f2f565b60015b611ae3573d8060008114611a90576040519150601f19603f3d011682016040523d82523d6000602084013e611a95565b606091505b50600081511415611adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad29061241c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b38565b600190505b949350505050565b600080823b905060008111915050919050565b828054611b5f906127d6565b90600052602060002090601f016020900481019282611b815760008555611bc8565b82601f10611b9a57805160ff1916838001178555611bc8565b82800160010185558215611bc8579182015b82811115611bc7578251825591602001919060010190611bac565b5b509050611bd59190611bd9565b5090565b5b80821115611bf2576000816000905550600101611bda565b5090565b6000611c09611c04846125dc565b6125b7565b905082815260208101848484011115611c2557611c246128cb565b5b611c30848285612794565b509392505050565b6000611c4b611c468461260d565b6125b7565b905082815260208101848484011115611c6757611c666128cb565b5b611c72848285612794565b509392505050565b600081359050611c8981612c79565b92915050565b600081359050611c9e81612c90565b92915050565b600081359050611cb381612ca7565b92915050565b600081519050611cc881612ca7565b92915050565b600082601f830112611ce357611ce26128c6565b5b8135611cf3848260208601611bf6565b91505092915050565b600082601f830112611d1157611d106128c6565b5b8135611d21848260208601611c38565b91505092915050565b600081359050611d3981612cbe565b92915050565b600060208284031215611d5557611d546128d5565b5b6000611d6384828501611c7a565b91505092915050565b60008060408385031215611d8357611d826128d5565b5b6000611d9185828601611c7a565b9250506020611da285828601611c7a565b9150509250929050565b600080600060608486031215611dc557611dc46128d5565b5b6000611dd386828701611c7a565b9350506020611de486828701611c7a565b9250506040611df586828701611d2a565b9150509250925092565b60008060008060808587031215611e1957611e186128d5565b5b6000611e2787828801611c7a565b9450506020611e3887828801611c7a565b9350506040611e4987828801611d2a565b925050606085013567ffffffffffffffff811115611e6a57611e696128d0565b5b611e7687828801611cce565b91505092959194509250565b60008060408385031215611e9957611e986128d5565b5b6000611ea785828601611c7a565b9250506020611eb885828601611c8f565b9150509250929050565b60008060408385031215611ed957611ed86128d5565b5b6000611ee785828601611c7a565b9250506020611ef885828601611d2a565b9150509250929050565b600060208284031215611f1857611f176128d5565b5b6000611f2684828501611ca4565b91505092915050565b600060208284031215611f4557611f446128d5565b5b6000611f5384828501611cb9565b91505092915050565b600060208284031215611f7257611f716128d5565b5b600082013567ffffffffffffffff811115611f9057611f8f6128d0565b5b611f9c84828501611cfc565b91505092915050565b60008060408385031215611fbc57611fbb6128d5565b5b600083013567ffffffffffffffff811115611fda57611fd96128d0565b5b611fe685828601611cfc565b925050602083013567ffffffffffffffff811115612007576120066128d0565b5b61201385828601611cfc565b9150509250929050565b600060208284031215612033576120326128d5565b5b600061204184828501611d2a565b91505092915050565b61205381612720565b82525050565b61206281612732565b82525050565b600061207382612653565b61207d8185612669565b935061208d8185602086016127a3565b612096816128da565b840191505092915050565b60006120ac8261265e565b6120b6818561267a565b93506120c68185602086016127a3565b6120cf816128da565b840191505092915050565b60006120e58261265e565b6120ef818561268b565b93506120ff8185602086016127a3565b80840191505092915050565b60008154612118816127d6565b612122818661268b565b9450600182166000811461213d576001811461214e57612181565b60ff19831686528186019350612181565b6121578561263e565b60005b838110156121795781548189015260018201915060208101905061215a565b838801955050505b50505092915050565b600061219760328361267a565b91506121a2826128eb565b604082019050919050565b60006121ba60248361267a565b91506121c58261293a565b604082019050919050565b60006121dd60198361267a565b91506121e882612989565b602082019050919050565b6000612200602c8361267a565b915061220b826129b2565b604082019050919050565b600061222360388361267a565b915061222e82612a01565b604082019050919050565b6000612246602a8361267a565b915061225182612a50565b604082019050919050565b600061226960298361267a565b915061227482612a9f565b604082019050919050565b600061228c602c8361267a565b915061229782612aee565b604082019050919050565b60006122af60298361267a565b91506122ba82612b3d565b604082019050919050565b60006122d2602f8361267a565b91506122dd82612b8c565b604082019050919050565b60006122f560218361267a565b915061230082612bdb565b604082019050919050565b600061231860318361267a565b915061232382612c2a565b604082019050919050565b6123378161278a565b82525050565b600061234982846120da565b915081905092915050565b6000612360828561210b565b915061236c828461210b565b91508190509392505050565b600060208201905061238d600083018461204a565b92915050565b60006080820190506123a8600083018761204a565b6123b5602083018661204a565b6123c2604083018561232e565b81810360608301526123d48184612068565b905095945050505050565b60006020820190506123f46000830184612059565b92915050565b6000602082019050818103600083015261241481846120a1565b905092915050565b600060208201905081810360008301526124358161218a565b9050919050565b60006020820190508181036000830152612455816121ad565b9050919050565b60006020820190508181036000830152612475816121d0565b9050919050565b60006020820190508181036000830152612495816121f3565b9050919050565b600060208201905081810360008301526124b581612216565b9050919050565b600060208201905081810360008301526124d581612239565b9050919050565b600060208201905081810360008301526124f58161225c565b9050919050565b600060208201905081810360008301526125158161227f565b9050919050565b60006020820190508181036000830152612535816122a2565b9050919050565b60006020820190508181036000830152612555816122c5565b9050919050565b60006020820190508181036000830152612575816122e8565b9050919050565b600060208201905081810360008301526125958161230b565b9050919050565b60006020820190506125b1600083018461232e565b92915050565b60006125c16125d2565b90506125cd8282612808565b919050565b6000604051905090565b600067ffffffffffffffff8211156125f7576125f6612897565b5b612600826128da565b9050602081019050919050565b600067ffffffffffffffff82111561262857612627612897565b5b612631826128da565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006126a18261278a565b91506126ac8361278a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156126e1576126e0612839565b5b828201905092915050565b60006126f78261278a565b91506127028361278a565b92508282101561271557612714612839565b5b828203905092915050565b600061272b8261276a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156127c15780820151818401526020810190506127a6565b838111156127d0576000848401525b50505050565b600060028204905060018216806127ee57607f821691505b6020821081141561280257612801612868565b5b50919050565b612811826128da565b810181811067ffffffffffffffff821117156128305761282f612897565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b612c8281612720565b8114612c8d57600080fd5b50565b612c9981612732565b8114612ca457600080fd5b50565b612cb08161273e565b8114612cbb57600080fd5b50565b612cc78161278a565b8114612cd257600080fd5b5056fea26469706673582212202c912216dee4ef8bb9630f2f0ed0b7703345ecffe99ea3ad224099d823d901b164736f6c63430008070033
Deployed Bytecode Sourcemap
35530:1894:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22027:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22972:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24531:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24054:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25421:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36947:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25831:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35824:704;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22666:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22396:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35647:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23141:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24824:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36556:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36751:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26087:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35694:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35757:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37075:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25190:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22027:305;22129:4;22181:25;22166:40;;;:11;:40;;;;:105;;;;22238:33;22223:48;;;:11;:48;;;;22166:105;:158;;;;22288:36;22312:11;22288:23;:36::i;:::-;22166:158;22146:178;;22027:305;;;:::o;22972:100::-;23026:13;23059:5;23052:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22972:100;:::o;24531:221::-;24607:7;24635:16;24643:7;24635;:16::i;:::-;24627:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24720:15;:24;24736:7;24720:24;;;;;;;;;;;;;;;;;;;;;24713:31;;24531:221;;;:::o;24054:411::-;24135:13;24151:23;24166:7;24151:14;:23::i;:::-;24135:39;;24199:5;24193:11;;:2;:11;;;;24185:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24293:5;24277:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24302:37;24319:5;24326:12;:10;:12::i;:::-;24302:16;:37::i;:::-;24277:62;24255:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24436:21;24445:2;24449:7;24436:8;:21::i;:::-;24124:341;24054:411;;:::o;25421:339::-;25616:41;25635:12;:10;:12::i;:::-;25649:7;25616:18;:41::i;:::-;25608:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25724:28;25734:4;25740:2;25744:7;25724:9;:28::i;:::-;25421:339;;;:::o;36947:110::-;37001:13;37034:6;:15;37041:7;37034:15;;;;;;;;;;;37027:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36947:110;;;:::o;25831:185::-;25969:39;25986:4;25992:2;25996:7;25969:39;;;;;;;;;;;;:16;:39::i;:::-;25831:185;;;:::o;35824:704::-;35911:7;35933:9;35945:5;35933:17;;35970:8;;;;;;;;;;;35962:26;;:37;35989:9;35962:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36016:15;36069:7;36052:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;36042:36;;;;;;36034:45;;36016:63;;36121:1;36095:28;;:7;:16;36103:7;36095:16;;;;;;;;;;;;;;;;;;;;;:28;;;36092:141;;;36150:4;36137:9;:17;36134:36;;36164:4;36157:11;;36134:36;36092:141;;;36203:10;36183:30;;:7;:16;36191:7;36183:16;;;;;;;;;;;;;;;;;;;;;:30;;;36180:51;;;36225:4;36218:11;;36180:51;36092:141;36248:4;36245:274;;;36284:4;36268;:13;36273:7;36268:13;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;36318:7;36300:6;:15;36307:7;36300:15;;;;;;;;;;;:25;;;;;;;;;;;;:::i;:::-;;36368:1;36343:9;:21;36353:10;36343:21;;;;;;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;36399:10;36380:7;:16;36388:7;36380:16;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36460:7;36448:10;36427:41;;36444:1;36427:41;;;;;;;;;;;;36498:7;36491:14;;;;;;36245:274;35920:608;;35824:704;;;;;:::o;22666:239::-;22738:7;22758:13;22774:7;:16;22782:7;22774:16;;;;;;;;;;;;;;;;;;;;;22758:32;;22826:1;22809:19;;:5;:19;;;;22801:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22892:5;22885:12;;;22666:239;;;:::o;22396:208::-;22468:7;22513:1;22496:19;;:5;:19;;;;22488:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22580:9;:16;22590:5;22580:16;;;;;;;;;;;;;;;;22573:23;;22396:208;;;:::o;35647:38::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23141:104::-;23197:13;23230:7;23223:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23141:104;:::o;24824:295::-;24939:12;:10;:12::i;:::-;24927:24;;:8;:24;;;;24919:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25039:8;24994:18;:32;25013:12;:10;:12::i;:::-;24994:32;;;;;;;;;;;;;;;:42;25027:8;24994:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25092:8;25063:48;;25078:12;:10;:12::i;:::-;25063:48;;;25102:8;25063:48;;;;;;:::i;:::-;;;;;;;;24824:295;;:::o;36556:191::-;36619:13;36645:15;36698:7;36681:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;36671:36;;;;;;36663:45;;36645:63;;36726:4;:13;36731:7;36726:13;;;;;;;;;;;36719:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36556:191;;;:::o;36751:190::-;36816:7;36836:15;36889:7;36872:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;36862:36;;;;;;36854:45;;36836:63;;36917:7;:16;36925:7;36917:16;;;;;;;;;;;;;;;;;;;;;36910:23;;;36751:190;;;:::o;26087:328::-;26262:41;26281:12;:10;:12::i;:::-;26295:7;26262:18;:41::i;:::-;26254:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26368:39;26382:4;26388:2;26392:7;26401:5;26368:13;:39::i;:::-;26087:328;;;;:::o;35694:40::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35757:52::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37075:269::-;37148:13;37186:16;37194:7;37186;:16::i;:::-;37178:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;37306:7;37315:6;:15;37322:7;37315:15;;;;;;;;;;;37289:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37275:57;;37075:269;;;:::o;25190:164::-;25287:4;25311:18;:25;25330:5;25311:25;;;;;;;;;;;;;;;:35;25337:8;25311:35;;;;;;;;;;;;;;;;;;;;;;;;;25304:42;;25190:164;;;;:::o;14973:157::-;15058:4;15097:25;15082:40;;;:11;:40;;;;15075:47;;14973:157;;;:::o;27925:127::-;27990:4;28042:1;28014:30;;:7;:16;28022:7;28014:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28007:37;;27925:127;;;:::o;4045:98::-;4098:7;4125:10;4118:17;;4045:98;:::o;31907:174::-;32009:2;31982:15;:24;31998:7;31982:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32065:7;32061:2;32027:46;;32036:23;32051:7;32036:14;:23::i;:::-;32027:46;;;;;;;;;;;;31907:174;;:::o;28219:348::-;28312:4;28337:16;28345:7;28337;:16::i;:::-;28329:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28413:13;28429:23;28444:7;28429:14;:23::i;:::-;28413:39;;28482:5;28471:16;;:7;:16;;;:51;;;;28515:7;28491:31;;:20;28503:7;28491:11;:20::i;:::-;:31;;;28471:51;:87;;;;28526:32;28543:5;28550:7;28526:16;:32::i;:::-;28471:87;28463:96;;;28219:348;;;;:::o;31211:578::-;31370:4;31343:31;;:23;31358:7;31343:14;:23::i;:::-;:31;;;31335:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31453:1;31439:16;;:2;:16;;;;31431:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31509:39;31530:4;31536:2;31540:7;31509:20;:39::i;:::-;31613:29;31630:1;31634:7;31613:8;:29::i;:::-;31674:1;31655:9;:15;31665:4;31655:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31703:1;31686:9;:13;31696:2;31686:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31734:2;31715:7;:16;31723:7;31715:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31773:7;31769:2;31754:27;;31763:4;31754:27;;;;;;;;;;;;31211:578;;;:::o;27297:315::-;27454:28;27464:4;27470:2;27474:7;27454:9;:28::i;:::-;27501:48;27524:4;27530:2;27534:7;27543:5;27501:22;:48::i;:::-;27493:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27297:315;;;;:::o;34017:126::-;;;;:::o;32646:799::-;32801:4;32822:15;:2;:13;;;:15::i;:::-;32818:620;;;32874:2;32858:36;;;32895:12;:10;:12::i;:::-;32909:4;32915:7;32924:5;32858:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32854:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33117:1;33100:6;:13;:18;33096:272;;;33143:60;;;;;;;;;;:::i;:::-;;;;;;;;33096:272;33318:6;33312:13;33303:6;33299:2;33295:15;33288:38;32854:529;32991:41;;;32981:51;;;:6;:51;;;;32974:58;;;;;32818:620;33422:4;33415:11;;32646:799;;;;;;;:::o;5025:387::-;5085:4;5293:12;5360:7;5348:20;5340:28;;5403:1;5396:4;:8;5389:15;;;5025:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:834::-;6911:6;6919;6968:2;6956:9;6947:7;6943:23;6939:32;6936:119;;;6974:79;;:::i;:::-;6936:119;7122:1;7111:9;7107:17;7094:31;7152:18;7144:6;7141:30;7138:117;;;7174:79;;:::i;:::-;7138:117;7279:63;7334:7;7325:6;7314:9;7310:22;7279:63;:::i;:::-;7269:73;;7065:287;7419:2;7408:9;7404:18;7391:32;7450:18;7442:6;7439:30;7436:117;;;7472:79;;:::i;:::-;7436:117;7577:63;7632:7;7623:6;7612:9;7608:22;7577:63;:::i;:::-;7567:73;;7362:288;6823:834;;;;;:::o;7663:329::-;7722:6;7771:2;7759:9;7750:7;7746:23;7742:32;7739:119;;;7777:79;;:::i;:::-;7739:119;7897:1;7922:53;7967:7;7958:6;7947:9;7943:22;7922:53;:::i;:::-;7912:63;;7868:117;7663:329;;;;:::o;7998:118::-;8085:24;8103:5;8085:24;:::i;:::-;8080:3;8073:37;7998:118;;:::o;8122:109::-;8203:21;8218:5;8203:21;:::i;:::-;8198:3;8191:34;8122:109;;:::o;8237:360::-;8323:3;8351:38;8383:5;8351:38;:::i;:::-;8405:70;8468:6;8463:3;8405:70;:::i;:::-;8398:77;;8484:52;8529:6;8524:3;8517:4;8510:5;8506:16;8484:52;:::i;:::-;8561:29;8583:6;8561:29;:::i;:::-;8556:3;8552:39;8545:46;;8327:270;8237:360;;;;:::o;8603:364::-;8691:3;8719:39;8752:5;8719:39;:::i;:::-;8774:71;8838:6;8833:3;8774:71;:::i;:::-;8767:78;;8854:52;8899:6;8894:3;8887:4;8880:5;8876:16;8854:52;:::i;:::-;8931:29;8953:6;8931:29;:::i;:::-;8926:3;8922:39;8915:46;;8695:272;8603:364;;;;:::o;8973:377::-;9079:3;9107:39;9140:5;9107:39;:::i;:::-;9162:89;9244:6;9239:3;9162:89;:::i;:::-;9155:96;;9260:52;9305:6;9300:3;9293:4;9286:5;9282:16;9260:52;:::i;:::-;9337:6;9332:3;9328:16;9321:23;;9083:267;8973:377;;;;:::o;9380:845::-;9483:3;9520:5;9514:12;9549:36;9575:9;9549:36;:::i;:::-;9601:89;9683:6;9678:3;9601:89;:::i;:::-;9594:96;;9721:1;9710:9;9706:17;9737:1;9732:137;;;;9883:1;9878:341;;;;9699:520;;9732:137;9816:4;9812:9;9801;9797:25;9792:3;9785:38;9852:6;9847:3;9843:16;9836:23;;9732:137;;9878:341;9945:38;9977:5;9945:38;:::i;:::-;10005:1;10019:154;10033:6;10030:1;10027:13;10019:154;;;10107:7;10101:14;10097:1;10092:3;10088:11;10081:35;10157:1;10148:7;10144:15;10133:26;;10055:4;10052:1;10048:12;10043:17;;10019:154;;;10202:6;10197:3;10193:16;10186:23;;9885:334;;9699:520;;9487:738;;9380:845;;;;:::o;10231:366::-;10373:3;10394:67;10458:2;10453:3;10394:67;:::i;:::-;10387:74;;10470:93;10559:3;10470:93;:::i;:::-;10588:2;10583:3;10579:12;10572:19;;10231:366;;;:::o;10603:::-;10745:3;10766:67;10830:2;10825:3;10766:67;:::i;:::-;10759:74;;10842:93;10931:3;10842:93;:::i;:::-;10960:2;10955:3;10951:12;10944:19;;10603:366;;;:::o;10975:::-;11117:3;11138:67;11202:2;11197:3;11138:67;:::i;:::-;11131:74;;11214:93;11303:3;11214:93;:::i;:::-;11332:2;11327:3;11323:12;11316:19;;10975:366;;;:::o;11347:::-;11489:3;11510:67;11574:2;11569:3;11510:67;:::i;:::-;11503:74;;11586:93;11675:3;11586:93;:::i;:::-;11704:2;11699:3;11695:12;11688:19;;11347:366;;;:::o;11719:::-;11861:3;11882:67;11946:2;11941:3;11882:67;:::i;:::-;11875:74;;11958:93;12047:3;11958:93;:::i;:::-;12076:2;12071:3;12067:12;12060:19;;11719:366;;;:::o;12091:::-;12233:3;12254:67;12318:2;12313:3;12254:67;:::i;:::-;12247:74;;12330:93;12419:3;12330:93;:::i;:::-;12448:2;12443:3;12439:12;12432:19;;12091:366;;;:::o;12463:::-;12605:3;12626:67;12690:2;12685:3;12626:67;:::i;:::-;12619:74;;12702:93;12791:3;12702:93;:::i;:::-;12820:2;12815:3;12811:12;12804:19;;12463:366;;;:::o;12835:::-;12977:3;12998:67;13062:2;13057:3;12998:67;:::i;:::-;12991:74;;13074:93;13163:3;13074:93;:::i;:::-;13192:2;13187:3;13183:12;13176:19;;12835:366;;;:::o;13207:::-;13349:3;13370:67;13434:2;13429:3;13370:67;:::i;:::-;13363:74;;13446:93;13535:3;13446:93;:::i;:::-;13564:2;13559:3;13555:12;13548:19;;13207:366;;;:::o;13579:::-;13721:3;13742:67;13806:2;13801:3;13742:67;:::i;:::-;13735:74;;13818:93;13907:3;13818:93;:::i;:::-;13936:2;13931:3;13927:12;13920:19;;13579:366;;;:::o;13951:::-;14093:3;14114:67;14178:2;14173:3;14114:67;:::i;:::-;14107:74;;14190:93;14279:3;14190:93;:::i;:::-;14308:2;14303:3;14299:12;14292:19;;13951:366;;;:::o;14323:::-;14465:3;14486:67;14550:2;14545:3;14486:67;:::i;:::-;14479:74;;14562:93;14651:3;14562:93;:::i;:::-;14680:2;14675:3;14671:12;14664:19;;14323:366;;;:::o;14695:118::-;14782:24;14800:5;14782:24;:::i;:::-;14777:3;14770:37;14695:118;;:::o;14819:275::-;14951:3;14973:95;15064:3;15055:6;14973:95;:::i;:::-;14966:102;;15085:3;15078:10;;14819:275;;;;:::o;15100:423::-;15274:3;15296:92;15384:3;15375:6;15296:92;:::i;:::-;15289:99;;15405:92;15493:3;15484:6;15405:92;:::i;:::-;15398:99;;15514:3;15507:10;;15100:423;;;;;:::o;15529:222::-;15622:4;15660:2;15649:9;15645:18;15637:26;;15673:71;15741:1;15730:9;15726:17;15717:6;15673:71;:::i;:::-;15529:222;;;;:::o;15757:640::-;15952:4;15990:3;15979:9;15975:19;15967:27;;16004:71;16072:1;16061:9;16057:17;16048:6;16004:71;:::i;:::-;16085:72;16153:2;16142:9;16138:18;16129:6;16085:72;:::i;:::-;16167;16235:2;16224:9;16220:18;16211:6;16167:72;:::i;:::-;16286:9;16280:4;16276:20;16271:2;16260:9;16256:18;16249:48;16314:76;16385:4;16376:6;16314:76;:::i;:::-;16306:84;;15757:640;;;;;;;:::o;16403:210::-;16490:4;16528:2;16517:9;16513:18;16505:26;;16541:65;16603:1;16592:9;16588:17;16579:6;16541:65;:::i;:::-;16403:210;;;;:::o;16619:313::-;16732:4;16770:2;16759:9;16755:18;16747:26;;16819:9;16813:4;16809:20;16805:1;16794:9;16790:17;16783:47;16847:78;16920:4;16911:6;16847:78;:::i;:::-;16839:86;;16619:313;;;;:::o;16938:419::-;17104:4;17142:2;17131:9;17127:18;17119:26;;17191:9;17185:4;17181:20;17177:1;17166:9;17162:17;17155:47;17219:131;17345:4;17219:131;:::i;:::-;17211:139;;16938:419;;;:::o;17363:::-;17529:4;17567:2;17556:9;17552:18;17544:26;;17616:9;17610:4;17606:20;17602:1;17591:9;17587:17;17580:47;17644:131;17770:4;17644:131;:::i;:::-;17636:139;;17363:419;;;:::o;17788:::-;17954:4;17992:2;17981:9;17977:18;17969:26;;18041:9;18035:4;18031:20;18027:1;18016:9;18012:17;18005:47;18069:131;18195:4;18069:131;:::i;:::-;18061:139;;17788:419;;;:::o;18213:::-;18379:4;18417:2;18406:9;18402:18;18394:26;;18466:9;18460:4;18456:20;18452:1;18441:9;18437:17;18430:47;18494:131;18620:4;18494:131;:::i;:::-;18486:139;;18213:419;;;:::o;18638:::-;18804:4;18842:2;18831:9;18827:18;18819:26;;18891:9;18885:4;18881:20;18877:1;18866:9;18862:17;18855:47;18919:131;19045:4;18919:131;:::i;:::-;18911:139;;18638:419;;;:::o;19063:::-;19229:4;19267:2;19256:9;19252:18;19244:26;;19316:9;19310:4;19306:20;19302:1;19291:9;19287:17;19280:47;19344:131;19470:4;19344:131;:::i;:::-;19336:139;;19063:419;;;:::o;19488:::-;19654:4;19692:2;19681:9;19677:18;19669:26;;19741:9;19735:4;19731:20;19727:1;19716:9;19712:17;19705:47;19769:131;19895:4;19769:131;:::i;:::-;19761:139;;19488:419;;;:::o;19913:::-;20079:4;20117:2;20106:9;20102:18;20094:26;;20166:9;20160:4;20156:20;20152:1;20141:9;20137:17;20130:47;20194:131;20320:4;20194:131;:::i;:::-;20186:139;;19913:419;;;:::o;20338:::-;20504:4;20542:2;20531:9;20527:18;20519:26;;20591:9;20585:4;20581:20;20577:1;20566:9;20562:17;20555:47;20619:131;20745:4;20619:131;:::i;:::-;20611:139;;20338:419;;;:::o;20763:::-;20929:4;20967:2;20956:9;20952:18;20944:26;;21016:9;21010:4;21006:20;21002:1;20991:9;20987:17;20980:47;21044:131;21170:4;21044:131;:::i;:::-;21036:139;;20763:419;;;:::o;21188:::-;21354:4;21392:2;21381:9;21377:18;21369:26;;21441:9;21435:4;21431:20;21427:1;21416:9;21412:17;21405:47;21469:131;21595:4;21469:131;:::i;:::-;21461:139;;21188:419;;;:::o;21613:::-;21779:4;21817:2;21806:9;21802:18;21794:26;;21866:9;21860:4;21856:20;21852:1;21841:9;21837:17;21830:47;21894:131;22020:4;21894:131;:::i;:::-;21886:139;;21613:419;;;:::o;22038:222::-;22131:4;22169:2;22158:9;22154:18;22146:26;;22182:71;22250:1;22239:9;22235:17;22226:6;22182:71;:::i;:::-;22038:222;;;;:::o;22266:129::-;22300:6;22327:20;;:::i;:::-;22317:30;;22356:33;22384:4;22376:6;22356:33;:::i;:::-;22266:129;;;:::o;22401:75::-;22434:6;22467:2;22461:9;22451:19;;22401:75;:::o;22482:307::-;22543:4;22633:18;22625:6;22622:30;22619:56;;;22655:18;;:::i;:::-;22619:56;22693:29;22715:6;22693:29;:::i;:::-;22685:37;;22777:4;22771;22767:15;22759:23;;22482:307;;;:::o;22795:308::-;22857:4;22947:18;22939:6;22936:30;22933:56;;;22969:18;;:::i;:::-;22933:56;23007:29;23029:6;23007:29;:::i;:::-;22999:37;;23091:4;23085;23081:15;23073:23;;22795:308;;;:::o;23109:141::-;23158:4;23181:3;23173:11;;23204:3;23201:1;23194:14;23238:4;23235:1;23225:18;23217:26;;23109:141;;;:::o;23256:98::-;23307:6;23341:5;23335:12;23325:22;;23256:98;;;:::o;23360:99::-;23412:6;23446:5;23440:12;23430:22;;23360:99;;;:::o;23465:168::-;23548:11;23582:6;23577:3;23570:19;23622:4;23617:3;23613:14;23598:29;;23465:168;;;;:::o;23639:169::-;23723:11;23757:6;23752:3;23745:19;23797:4;23792:3;23788:14;23773:29;;23639:169;;;;:::o;23814:148::-;23916:11;23953:3;23938:18;;23814:148;;;;:::o;23968:305::-;24008:3;24027:20;24045:1;24027:20;:::i;:::-;24022:25;;24061:20;24079:1;24061:20;:::i;:::-;24056:25;;24215:1;24147:66;24143:74;24140:1;24137:81;24134:107;;;24221:18;;:::i;:::-;24134:107;24265:1;24262;24258:9;24251:16;;23968:305;;;;:::o;24279:191::-;24319:4;24339:20;24357:1;24339:20;:::i;:::-;24334:25;;24373:20;24391:1;24373:20;:::i;:::-;24368:25;;24412:1;24409;24406:8;24403:34;;;24417:18;;:::i;:::-;24403:34;24462:1;24459;24455:9;24447:17;;24279:191;;;;:::o;24476:96::-;24513:7;24542:24;24560:5;24542:24;:::i;:::-;24531:35;;24476:96;;;:::o;24578:90::-;24612:7;24655:5;24648:13;24641:21;24630:32;;24578:90;;;:::o;24674:149::-;24710:7;24750:66;24743:5;24739:78;24728:89;;24674:149;;;:::o;24829:126::-;24866:7;24906:42;24899:5;24895:54;24884:65;;24829:126;;;:::o;24961:77::-;24998:7;25027:5;25016:16;;24961:77;;;:::o;25044:154::-;25128:6;25123:3;25118;25105:30;25190:1;25181:6;25176:3;25172:16;25165:27;25044:154;;;:::o;25204:307::-;25272:1;25282:113;25296:6;25293:1;25290:13;25282:113;;;25381:1;25376:3;25372:11;25366:18;25362:1;25357:3;25353:11;25346:39;25318:2;25315:1;25311:10;25306:15;;25282:113;;;25413:6;25410:1;25407:13;25404:101;;;25493:1;25484:6;25479:3;25475:16;25468:27;25404:101;25253:258;25204:307;;;:::o;25517:320::-;25561:6;25598:1;25592:4;25588:12;25578:22;;25645:1;25639:4;25635:12;25666:18;25656:81;;25722:4;25714:6;25710:17;25700:27;;25656:81;25784:2;25776:6;25773:14;25753:18;25750:38;25747:84;;;25803:18;;:::i;:::-;25747:84;25568:269;25517:320;;;:::o;25843:281::-;25926:27;25948:4;25926:27;:::i;:::-;25918:6;25914:40;26056:6;26044:10;26041:22;26020:18;26008:10;26005:34;26002:62;25999:88;;;26067:18;;:::i;:::-;25999:88;26107:10;26103:2;26096:22;25886:238;25843:281;;:::o;26130:180::-;26178:77;26175:1;26168:88;26275:4;26272:1;26265:15;26299:4;26296:1;26289:15;26316:180;26364:77;26361:1;26354:88;26461:4;26458:1;26451:15;26485:4;26482:1;26475:15;26502:180;26550:77;26547:1;26540:88;26647:4;26644:1;26637:15;26671:4;26668:1;26661:15;26688:117;26797:1;26794;26787:12;26811:117;26920:1;26917;26910:12;26934:117;27043:1;27040;27033:12;27057:117;27166:1;27163;27156:12;27180:102;27221:6;27272:2;27268:7;27263:2;27256:5;27252:14;27248:28;27238:38;;27180:102;;;:::o;27288:237::-;27428:34;27424:1;27416:6;27412:14;27405:58;27497:20;27492:2;27484:6;27480:15;27473:45;27288:237;:::o;27531:223::-;27671:34;27667:1;27659:6;27655:14;27648:58;27740:6;27735:2;27727:6;27723:15;27716:31;27531:223;:::o;27760:175::-;27900:27;27896:1;27888:6;27884:14;27877:51;27760:175;:::o;27941:231::-;28081:34;28077:1;28069:6;28065:14;28058:58;28150:14;28145:2;28137:6;28133:15;28126:39;27941:231;:::o;28178:243::-;28318:34;28314:1;28306:6;28302:14;28295:58;28387:26;28382:2;28374:6;28370:15;28363:51;28178:243;:::o;28427:229::-;28567:34;28563:1;28555:6;28551:14;28544:58;28636:12;28631:2;28623:6;28619:15;28612:37;28427:229;:::o;28662:228::-;28802:34;28798:1;28790:6;28786:14;28779:58;28871:11;28866:2;28858:6;28854:15;28847:36;28662:228;:::o;28896:231::-;29036:34;29032:1;29024:6;29020:14;29013:58;29105:14;29100:2;29092:6;29088:15;29081:39;28896:231;:::o;29133:228::-;29273:34;29269:1;29261:6;29257:14;29250:58;29342:11;29337:2;29329:6;29325:15;29318:36;29133:228;:::o;29367:234::-;29507:34;29503:1;29495:6;29491:14;29484:58;29576:17;29571:2;29563:6;29559:15;29552:42;29367:234;:::o;29607:220::-;29747:34;29743:1;29735:6;29731:14;29724:58;29816:3;29811:2;29803:6;29799:15;29792:28;29607:220;:::o;29833:236::-;29973:34;29969:1;29961:6;29957:14;29950:58;30042:19;30037:2;30029:6;30025:15;30018:44;29833:236;:::o;30075:122::-;30148:24;30166:5;30148:24;:::i;:::-;30141:5;30138:35;30128:63;;30187:1;30184;30177:12;30128:63;30075:122;:::o;30203:116::-;30273:21;30288:5;30273:21;:::i;:::-;30266:5;30263:32;30253:60;;30309:1;30306;30299:12;30253:60;30203:116;:::o;30325:120::-;30397:23;30414:5;30397:23;:::i;:::-;30390:5;30387:34;30377:62;;30435:1;30432;30425:12;30377:62;30325:120;:::o;30451:122::-;30524:24;30542:5;30524:24;:::i;:::-;30517:5;30514:35;30504:63;;30563:1;30560;30553:12;30504:63;30451:122;:::o
Swarm Source
ipfs://2c912216dee4ef8bb9630f2f0ed0b7703345ecffe99ea3ad224099d823d901b1
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.