ERC-721
Overview
Max Total Supply
15,000,000 eZIG
Holders
108
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 eZIGLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
UqbarDistribution
Compiler Version
v0.8.3+commit.8d00100c
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-11-09 */ // 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/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/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/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { 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: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/UqbarDistribution.sol pragma solidity 0.8.3; contract UqbarDistribution is ERC721, Ownable { uint256 public allocatedSupply = 0; uint256 public totalSupply; uint256 public burnedSupply; uint256 public nextId = 0; struct Detail { uint256 allocation; uint256 atBlock; bool burned; } mapping(uint256 => Detail) public tokenDetails; enum Vote { Absent, Aye, Nay } struct InflationProposal { address proposer; uint256 atBlock; uint256 newTotalSupply; uint256 ayes; uint256 nays; bool complete; } InflationProposal[] public proposals; mapping(uint256 => mapping(uint256 => Vote)) public votes; uint256 public quorumPercent = 15000000000; uint256 public quorumDenominator = 100000000000; uint256 public votingPeriod = 43200; // 7 days in blocks event Proposal(uint256 proposalId, uint256 newSupply, address proposer); event Voter(uint256 tokenId, uint256 proposalId, Vote vote); event Inflation(uint256 proposalId, uint256 newSupply); constructor(string memory _name, string memory _symbol, uint256 _cap) ERC721(_name, _symbol) Ownable() { totalSupply = _cap; } // Disable transfers function _transfer(address _from, address _to, uint256 _tokenId) internal override { revert("Nontransferable"); } // Owner functions function mint(address _to, uint256 _amount) external onlyOwner returns (uint256 id) { require(_to != address(0) && _to != address(this) && _to != owner(), "Invalid address"); require(_amount > 0, "No zero amount"); require(allocatedSupply + _amount <= totalSupply, "Exceeds total supply"); id = nextId; tokenDetails[nextId] = Detail(_amount, block.number, false); allocatedSupply += _amount; _safeMint(_to, id); nextId += 1; } function burn(uint256 _id) external onlyOwner { Detail storage tokenDetail_ = tokenDetails[_id]; require(!tokenDetail_.burned, "Already burned"); _burn(_id); burnedSupply += tokenDetail_.allocation; tokenDetail_.burned = true; } // Inflation-by-vote functions function proposeInflation(uint256 _tokenId, uint256 _newTotalSupply) external { require(_newTotalSupply > totalSupply, "Proposed supply must exceed current"); InflationProposal memory proposal; proposal.proposer = msg.sender; proposal.atBlock = block.number; proposal.newTotalSupply = _newTotalSupply; if (msg.sender != owner()) { require(ownerOf(_tokenId) == msg.sender, "Unauthorized"); proposal.ayes = tokenDetails[_tokenId].allocation; votes[proposals.length][_tokenId] = Vote.Aye; } proposals.push(proposal); emit Proposal(proposals.length - 1, _newTotalSupply, msg.sender); } function vote(uint256 _tokenId, uint256 _proposalId, Vote _vote) external { require(ownerOf(_tokenId) == msg.sender, "Unauthorized"); Vote prev = votes[_proposalId][_tokenId]; if (prev != _vote) { InflationProposal storage proposal_ = proposals[_proposalId]; require(block.number < proposal_.atBlock + votingPeriod, "Voting period elapsed"); Detail storage voterDetail_ = tokenDetails[_tokenId]; require(proposal_.atBlock > voterDetail_.atBlock, "Allocation must predate proposal"); if (votes[_proposalId][_tokenId] == Vote.Absent) { if (_vote == Vote.Aye) { proposal_.ayes += voterDetail_.allocation; } else if (_vote == Vote.Nay) { proposal_.nays += voterDetail_.allocation; } } else if (prev == Vote.Aye) { proposal_.ayes -= voterDetail_.allocation; proposal_.nays += voterDetail_.allocation; } else { proposal_.nays -= voterDetail_.allocation; proposal_.ayes += voterDetail_.allocation; } votes[_proposalId][_tokenId] = _vote; emit Voter(_tokenId, _proposalId, _vote); } } function executeProposal(uint256 _pid) external { InflationProposal storage proposal_ = proposals[_pid]; require(block.number > proposal_.atBlock + votingPeriod, "Voting period not elapsed"); require(!proposal_.complete, "Proposal already executed"); require(proposal_.newTotalSupply > totalSupply, "Superseded by previous proposal"); uint256 quorum = allocatedSupply * quorumPercent / quorumDenominator; require(proposal_.ayes + proposal_.nays >= quorum, "Does not meet quorum requirement"); require(proposal_.ayes > proposal_.nays, "Proposal did not pass"); totalSupply = proposal_.newTotalSupply; proposal_.complete = true; emit Inflation(totalSupply, _pid); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_cap","type":"uint256"}],"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":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"Inflation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSupply","type":"uint256"},{"indexed":false,"internalType":"address","name":"proposer","type":"address"}],"name":"Proposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"enum UqbarDistribution.Vote","name":"vote","type":"uint8"}],"name":"Voter","type":"event"},{"inputs":[],"name":"allocatedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_id","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"executeProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint256","name":"atBlock","type":"uint256"},{"internalType":"uint256","name":"newTotalSupply","type":"uint256"},{"internalType":"uint256","name":"ayes","type":"uint256"},{"internalType":"uint256","name":"nays","type":"uint256"},{"internalType":"bool","name":"complete","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_newTotalSupply","type":"uint256"}],"name":"proposeInflation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"quorumDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quorumPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenDetails","outputs":[{"internalType":"uint256","name":"allocation","type":"uint256"},{"internalType":"uint256","name":"atBlock","type":"uint256"},{"internalType":"bool","name":"burned","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_proposalId","type":"uint256"},{"internalType":"enum UqbarDistribution.Vote","name":"_vote","type":"uint8"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"votes","outputs":[{"internalType":"enum UqbarDistribution.Vote","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260006007556000600a5564037e11d600600e5564174876e800600f5561a8c06010553480156200003357600080fd5b506040516200268d3803806200268d83398101604081905262000056916200025d565b8251839083906200006f90600090602085019062000104565b5080516200008590600190602084019062000104565b505050620000a26200009c620000ae60201b60201c565b620000b2565b60085550620003209050565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200011290620002cd565b90600052602060002090601f01602090048101928262000136576000855562000181565b82601f106200015157805160ff191683800117855562000181565b8280016001018555821562000181579182015b828111156200018157825182559160200191906001019062000164565b506200018f92915062000193565b5090565b5b808211156200018f576000815560010162000194565b600082601f830112620001bb578081fd5b81516001600160401b0380821115620001d857620001d86200030a565b604051601f8301601f19908116603f011681019082821181831017156200020357620002036200030a565b816040528381526020925086838588010111156200021f578485fd5b8491505b8382101562000242578582018301518183018401529082019062000223565b838211156200025357848385830101525b9695505050505050565b60008060006060848603121562000272578283fd5b83516001600160401b038082111562000289578485fd5b6200029787838801620001aa565b94506020860151915080821115620002ad578384fd5b50620002bc86828701620001aa565b925050604084015190509250925092565b600181811c90821680620002e257607f821691505b602082108114156200030457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61235d80620003306000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80636352211e1161010f578063bbb2eab9116100a2578063eef15bfc11610071578063eef15bfc14610437578063f2fde38b1461044a578063f81cbd261461045d578063fc314e3114610466576101e5565b8063bbb2eab9146103c3578063c6e36a32146103d6578063c87b56dd14610411578063e985e9c514610424576101e5565b806395d89b41116100de57806395d89b411461038c57806397c3d33414610394578063a22cb4651461039d578063b88d4fde146103b0576101e5565b80636352211e1461034d57806370a0823114610360578063715018a6146103735780638da5cb5b1461037b576101e5565b806318160ddd1161018757806342842e0e1161015657806342842e0e1461031557806342966c681461032857806355d0a1d01461033b57806361b8ce8c14610344576101e5565b806318160ddd146102dd57806323b872dd146102e65780633a70a5ca146102f957806340c10f1914610302576101e5565b806306fdde03116101c357806306fdde0314610275578063081812fc1461028a578063095ea7b3146102b55780630d61b519146102ca576101e5565b8063013cf08b146101ea57806301ffc9a71461023b57806302a251a31461025e575b600080fd5b6101fd6101f8366004611f95565b6104b5565b604080516001600160a01b03909716875260208701959095529385019290925260608401526080830152151560a082015260c0015b60405180910390f35b61024e610249366004611f5d565b610508565b6040519015158152602001610232565b61026760105481565b604051908152602001610232565b61027d61055c565b60405161023291906120d1565b61029d610298366004611f95565b6105ee565b6040516001600160a01b039091168152602001610232565b6102c86102c3366004611f34565b610688565b005b6102c86102d8366004611f95565b61079e565b61026760085481565b6102c86102f4366004611dea565b610a0e565b61026760075481565b610267610310366004611f34565b610a3f565b6102c8610323366004611dea565b610c0a565b6102c8610336366004611f95565b610c25565b61026760095481565b610267600a5481565b61029d61035b366004611f95565b610cd6565b61026761036e366004611d9e565b610d4d565b6102c8610dd4565b6006546001600160a01b031661029d565b61027d610e0a565b610267600f5481565b6102c86103ab366004611efa565b610e19565b6102c86103be366004611e25565b610eeb565b6102c86103d1366004611fce565b610f23565b6104046103e4366004611fad565b600d60209081526000928352604080842090915290825290205460ff1681565b60405161023291906120c3565b61027d61041f366004611f95565b6112b4565b61024e610432366004611db8565b61139c565b6102c8610445366004611fad565b6113cc565b6102c8610458366004611d9e565b611692565b610267600e5481565b610498610474366004611f95565b600b6020526000908152604090208054600182015460029092015490919060ff1683565b604080519384526020840192909252151590820152606001610232565b600c81815481106104c557600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909260ff1686565b60006001600160e01b031982166380ac58cd60e01b148061053957506001600160e01b03198216635b5e139f60e01b145b8061055457506301ffc9a760e01b6001600160e01b03198316145b90505b919050565b60606000805461056b90612265565b80601f016020809104026020016040519081016040528092919081815260200182805461059790612265565b80156105e45780601f106105b9576101008083540402835291602001916105e4565b820191906000526020600020905b8154815290600101906020018083116105c757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661066c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061069382610cd6565b9050806001600160a01b0316836001600160a01b031614156107015760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610663565b336001600160a01b038216148061071d575061071d8133610432565b61078f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610663565b610799838361172d565b505050565b6000600c82815481106107c157634e487b7160e01b600052603260045260246000fd5b9060005260206000209060060201905060105481600101546107e391906121d7565b43116108315760405162461bcd60e51b815260206004820152601960248201527f566f74696e6720706572696f64206e6f7420656c6170736564000000000000006044820152606401610663565b600581015460ff16156108865760405162461bcd60e51b815260206004820152601960248201527f50726f706f73616c20616c7265616479206578656375746564000000000000006044820152606401610663565b6008548160020154116108db5760405162461bcd60e51b815260206004820152601f60248201527f537570657273656465642062792070726576696f75732070726f706f73616c006044820152606401610663565b6000600f54600e546007546108f09190612203565b6108fa91906121ef565b9050808260040154836003015461091191906121d7565b101561095f5760405162461bcd60e51b815260206004820181905260248201527f446f6573206e6f74206d6565742071756f72756d20726571756972656d656e746044820152606401610663565b81600401548260030154116109ae5760405162461bcd60e51b815260206004820152601560248201527450726f706f73616c20646964206e6f74207061737360581b6044820152606401610663565b6002820154600890815560058301805460ff19166001179055546040517f4df34928a73fc3e550b40b9a054bd4f8f210ffbde0cfa807499993fa2d1715db91610a01918690918252602082015260400190565b60405180910390a1505050565b610a18338261179b565b610a345760405162461bcd60e51b81526004016106639061216b565b610799838383611872565b6006546000906001600160a01b03163314610a6c5760405162461bcd60e51b815260040161066390612136565b6001600160a01b03831615801590610a8d57506001600160a01b0383163014155b8015610aa757506006546001600160a01b03848116911614155b610ae55760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610663565b60008211610b265760405162461bcd60e51b815260206004820152600e60248201526d139bc81e995c9bc8185b5bdd5b9d60921b6044820152606401610663565b60085482600754610b3791906121d7565b1115610b7c5760405162461bcd60e51b81526020600482015260146024820152734578636565647320746f74616c20737570706c7960601b6044820152606401610663565b50600a54604080516060810182528381524360208083019182526000838501818152868252600b9092529384209251835590516001830155516002909101805460ff191691151591909117905560078054849290610bdb9084906121d7565b90915550610beb905083826118ac565b6001600a6000828254610bfe91906121d7565b90915550909392505050565b61079983838360405180602001604052806000815250610eeb565b6006546001600160a01b03163314610c4f5760405162461bcd60e51b815260040161066390612136565b6000818152600b60205260409020600281015460ff1615610ca35760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e48189d5c9b995960921b6044820152606401610663565b610cac826118ca565b805460098054600090610cc09084906121d7565b9091555050600201805460ff1916600117905550565b6000818152600260205260408120546001600160a01b0316806105545760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610663565b60006001600160a01b038216610db85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610663565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610dfe5760405162461bcd60e51b815260040161066390612136565b610e086000611965565b565b60606001805461056b90612265565b6001600160a01b038216331415610e725760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610663565b3360008181526005602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610edf911515815260200190565b60405180910390a35050565b610ef5338361179b565b610f115760405162461bcd60e51b81526004016106639061216b565b610f1d848484846119b7565b50505050565b33610f2d84610cd6565b6001600160a01b031614610f725760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610663565b6000828152600d6020908152604080832086845290915290205460ff16816002811115610faf57634e487b7160e01b600052602160045260246000fd5b816002811115610fcf57634e487b7160e01b600052602160045260246000fd5b14610f1d576000600c8481548110610ff757634e487b7160e01b600052603260045260246000fd5b90600052602060002090600602019050601054816001015461101991906121d7565b431061105f5760405162461bcd60e51b8152602060048201526015602482015274159bdd1a5b99c81c195c9a5bd908195b185c1cd959605a1b6044820152606401610663565b6000858152600b6020526040902060018082015490830154116110c45760405162461bcd60e51b815260206004820181905260248201527f416c6c6f636174696f6e206d75737420707265646174652070726f706f73616c6044820152606401610663565b6000858152600d6020908152604080832089845290915281205460ff16600281111561110057634e487b7160e01b600052602160045260246000fd5b141561119857600184600281111561112857634e487b7160e01b600052602160045260246000fd5b141561114f5780546003830180546000906111449084906121d7565b909155506111939050565b600284600281111561117157634e487b7160e01b600052602160045260246000fd5b141561119357805460048301805460009061118d9084906121d7565b90915550505b611228565b60018360028111156111ba57634e487b7160e01b600052602160045260246000fd5b14156111f15780546003830180546000906111d6908490612222565b9091555050805460048301805460009061118d9084906121d7565b8054600483018054600090611207908490612222565b909155505080546003830180546000906112229084906121d7565b90915550505b6000858152600d602090815260408083208984529091529020805485919060ff1916600183600281111561126c57634e487b7160e01b600052602160045260246000fd5b02179055507fecee8152b57911921db27097b253bd3438bbf5b1bcfd972ab59843c63f45a0418686866040516112a4939291906121bc565b60405180910390a1505050505050565b6000818152600260205260409020546060906001600160a01b03166113335760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610663565b600061134a60408051602081019091526000815290565b9050600081511161136a5760405180602001604052806000815250611395565b80611374846119ea565b604051602001611385929190612057565b6040516020818303038152906040525b9392505050565b6001600160a01b0380831660009081526005602090815260408083209385168352929052205460ff165b92915050565b60085481116114295760405162461bcd60e51b815260206004820152602360248201527f50726f706f73656420737570706c79206d757374206578636565642063757272604482015262195b9d60ea1b6064820152608401610663565b61146d6040518060c0016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581525090565b33808252436020830152604082018390526006546001600160a01b031614611515573361149984610cd6565b6001600160a01b0316146114de5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610663565b6000838152600b60209081526040808320546060850152600c548352600d82528083208684529091529020805460ff191660011790555b600c805460018082018355600083905283517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7600690930292830180546001600160a01b0319166001600160a01b0390921691909117905560208401517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c883015560408401517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c983015560608401517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8ca83015560808401517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8cb83015560a08401517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8cc909201805460ff19169215159290921790915590547f5b08de95ac675a3c33acd3819e0667b9f3fe62d8ef95dee802819d7622dd6f189161167791612222565b60408051918252602082018590523390820152606001610a01565b6006546001600160a01b031633146116bc5760405162461bcd60e51b815260040161066390612136565b6001600160a01b0381166117215760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610663565b61172a81611965565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061176282610cd6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166118145760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610663565b600061181f83610cd6565b9050806001600160a01b0316846001600160a01b0316148061185a5750836001600160a01b031661184f846105ee565b6001600160a01b0316145b8061186a575061186a818561139c565b949350505050565b60405162461bcd60e51b815260206004820152600f60248201526e4e6f6e7472616e7366657261626c6560881b6044820152606401610663565b6118c6828260405180602001604052806000815250611b05565b5050565b60006118d582610cd6565b90506118e260008361172d565b6001600160a01b038116600090815260036020526040812080546001929061190b908490612222565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6119c2848484611872565b6119ce84848484611b38565b610f1d5760405162461bcd60e51b8152600401610663906120e4565b606081611a0f57506040805180820190915260018152600360fc1b6020820152610557565b8160005b8115611a395780611a23816122a0565b9150611a329050600a836121ef565b9150611a13565b60008167ffffffffffffffff811115611a6257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611a8c576020820181803683370190505b5090505b841561186a57611aa1600183612222565b9150611aae600a866122bb565b611ab99060306121d7565b60f81b818381518110611adc57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611afe600a866121ef565b9450611a90565b611b0f8383611c45565b611b1c6000848484611b38565b6107995760405162461bcd60e51b8152600401610663906120e4565b60006001600160a01b0384163b15611c3a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611b7c903390899088908890600401612086565b602060405180830381600087803b158015611b9657600080fd5b505af1925050508015611bc6575060408051601f3d908101601f19168201909252611bc391810190611f79565b60015b611c20573d808015611bf4576040519150601f19603f3d011682016040523d82523d6000602084013e611bf9565b606091505b508051611c185760405162461bcd60e51b8152600401610663906120e4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061186a565b506001949350505050565b6001600160a01b038216611c9b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610663565b6000818152600260205260409020546001600160a01b031615611d005760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610663565b6001600160a01b0382166000908152600360205260408120805460019290611d299084906121d7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80356001600160a01b038116811461055757600080fd5b600060208284031215611daf578081fd5b61139582611d87565b60008060408385031215611dca578081fd5b611dd383611d87565b9150611de160208401611d87565b90509250929050565b600080600060608486031215611dfe578081fd5b611e0784611d87565b9250611e1560208501611d87565b9150604084013590509250925092565b60008060008060808587031215611e3a578081fd5b611e4385611d87565b9350611e5160208601611d87565b925060408501359150606085013567ffffffffffffffff80821115611e74578283fd5b818701915087601f830112611e87578283fd5b813581811115611e9957611e996122fb565b604051601f8201601f19908116603f01168101908382118183101715611ec157611ec16122fb565b816040528281528a6020848701011115611ed9578586fd5b82602086016020830137918201602001949094529598949750929550505050565b60008060408385031215611f0c578182fd5b611f1583611d87565b915060208301358015158114611f29578182fd5b809150509250929050565b60008060408385031215611f46578182fd5b611f4f83611d87565b946020939093013593505050565b600060208284031215611f6e578081fd5b813561139581612311565b600060208284031215611f8a578081fd5b815161139581612311565b600060208284031215611fa6578081fd5b5035919050565b60008060408385031215611fbf578182fd5b50508035926020909101359150565b600080600060608486031215611fe2578283fd5b8335925060208401359150604084013560038110611ffe578182fd5b809150509250925092565b60008151808452612021816020860160208601612239565b601f01601f19169290920160200192915050565b6003811061205357634e487b7160e01b600052602160045260246000fd5b9052565b60008351612069818460208801612239565b83519083019061207d818360208801612239565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906120b990830184612009565b9695505050505050565b602081016113c68284612035565b6000602082526113956020830184612009565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b838152602081018390526060810161186a6040830184612035565b600082198211156121ea576121ea6122cf565b500190565b6000826121fe576121fe6122e5565b500490565b600081600019048311821515161561221d5761221d6122cf565b500290565b600082821015612234576122346122cf565b500390565b60005b8381101561225457818101518382015260200161223c565b83811115610f1d5750506000910152565b600181811c9082168061227957607f821691505b6020821081141561229a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156122b4576122b46122cf565b5060010190565b6000826122ca576122ca6122e5565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461172a57600080fdfea2646970667358221220bf330f30196b6ffa6887c8ce166fa0ac98161bd603f2cd3abe404f624ffda6e964736f6c63430008030033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000e4e1c00000000000000000000000000000000000000000000000000000000000000018557162617220546f6b656e20446973747269627574696f6e00000000000000000000000000000000000000000000000000000000000000000000000000000004655a494700000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80636352211e1161010f578063bbb2eab9116100a2578063eef15bfc11610071578063eef15bfc14610437578063f2fde38b1461044a578063f81cbd261461045d578063fc314e3114610466576101e5565b8063bbb2eab9146103c3578063c6e36a32146103d6578063c87b56dd14610411578063e985e9c514610424576101e5565b806395d89b41116100de57806395d89b411461038c57806397c3d33414610394578063a22cb4651461039d578063b88d4fde146103b0576101e5565b80636352211e1461034d57806370a0823114610360578063715018a6146103735780638da5cb5b1461037b576101e5565b806318160ddd1161018757806342842e0e1161015657806342842e0e1461031557806342966c681461032857806355d0a1d01461033b57806361b8ce8c14610344576101e5565b806318160ddd146102dd57806323b872dd146102e65780633a70a5ca146102f957806340c10f1914610302576101e5565b806306fdde03116101c357806306fdde0314610275578063081812fc1461028a578063095ea7b3146102b55780630d61b519146102ca576101e5565b8063013cf08b146101ea57806301ffc9a71461023b57806302a251a31461025e575b600080fd5b6101fd6101f8366004611f95565b6104b5565b604080516001600160a01b03909716875260208701959095529385019290925260608401526080830152151560a082015260c0015b60405180910390f35b61024e610249366004611f5d565b610508565b6040519015158152602001610232565b61026760105481565b604051908152602001610232565b61027d61055c565b60405161023291906120d1565b61029d610298366004611f95565b6105ee565b6040516001600160a01b039091168152602001610232565b6102c86102c3366004611f34565b610688565b005b6102c86102d8366004611f95565b61079e565b61026760085481565b6102c86102f4366004611dea565b610a0e565b61026760075481565b610267610310366004611f34565b610a3f565b6102c8610323366004611dea565b610c0a565b6102c8610336366004611f95565b610c25565b61026760095481565b610267600a5481565b61029d61035b366004611f95565b610cd6565b61026761036e366004611d9e565b610d4d565b6102c8610dd4565b6006546001600160a01b031661029d565b61027d610e0a565b610267600f5481565b6102c86103ab366004611efa565b610e19565b6102c86103be366004611e25565b610eeb565b6102c86103d1366004611fce565b610f23565b6104046103e4366004611fad565b600d60209081526000928352604080842090915290825290205460ff1681565b60405161023291906120c3565b61027d61041f366004611f95565b6112b4565b61024e610432366004611db8565b61139c565b6102c8610445366004611fad565b6113cc565b6102c8610458366004611d9e565b611692565b610267600e5481565b610498610474366004611f95565b600b6020526000908152604090208054600182015460029092015490919060ff1683565b604080519384526020840192909252151590820152606001610232565b600c81815481106104c557600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909260ff1686565b60006001600160e01b031982166380ac58cd60e01b148061053957506001600160e01b03198216635b5e139f60e01b145b8061055457506301ffc9a760e01b6001600160e01b03198316145b90505b919050565b60606000805461056b90612265565b80601f016020809104026020016040519081016040528092919081815260200182805461059790612265565b80156105e45780601f106105b9576101008083540402835291602001916105e4565b820191906000526020600020905b8154815290600101906020018083116105c757829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661066c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061069382610cd6565b9050806001600160a01b0316836001600160a01b031614156107015760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610663565b336001600160a01b038216148061071d575061071d8133610432565b61078f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610663565b610799838361172d565b505050565b6000600c82815481106107c157634e487b7160e01b600052603260045260246000fd5b9060005260206000209060060201905060105481600101546107e391906121d7565b43116108315760405162461bcd60e51b815260206004820152601960248201527f566f74696e6720706572696f64206e6f7420656c6170736564000000000000006044820152606401610663565b600581015460ff16156108865760405162461bcd60e51b815260206004820152601960248201527f50726f706f73616c20616c7265616479206578656375746564000000000000006044820152606401610663565b6008548160020154116108db5760405162461bcd60e51b815260206004820152601f60248201527f537570657273656465642062792070726576696f75732070726f706f73616c006044820152606401610663565b6000600f54600e546007546108f09190612203565b6108fa91906121ef565b9050808260040154836003015461091191906121d7565b101561095f5760405162461bcd60e51b815260206004820181905260248201527f446f6573206e6f74206d6565742071756f72756d20726571756972656d656e746044820152606401610663565b81600401548260030154116109ae5760405162461bcd60e51b815260206004820152601560248201527450726f706f73616c20646964206e6f74207061737360581b6044820152606401610663565b6002820154600890815560058301805460ff19166001179055546040517f4df34928a73fc3e550b40b9a054bd4f8f210ffbde0cfa807499993fa2d1715db91610a01918690918252602082015260400190565b60405180910390a1505050565b610a18338261179b565b610a345760405162461bcd60e51b81526004016106639061216b565b610799838383611872565b6006546000906001600160a01b03163314610a6c5760405162461bcd60e51b815260040161066390612136565b6001600160a01b03831615801590610a8d57506001600160a01b0383163014155b8015610aa757506006546001600160a01b03848116911614155b610ae55760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610663565b60008211610b265760405162461bcd60e51b815260206004820152600e60248201526d139bc81e995c9bc8185b5bdd5b9d60921b6044820152606401610663565b60085482600754610b3791906121d7565b1115610b7c5760405162461bcd60e51b81526020600482015260146024820152734578636565647320746f74616c20737570706c7960601b6044820152606401610663565b50600a54604080516060810182528381524360208083019182526000838501818152868252600b9092529384209251835590516001830155516002909101805460ff191691151591909117905560078054849290610bdb9084906121d7565b90915550610beb905083826118ac565b6001600a6000828254610bfe91906121d7565b90915550909392505050565b61079983838360405180602001604052806000815250610eeb565b6006546001600160a01b03163314610c4f5760405162461bcd60e51b815260040161066390612136565b6000818152600b60205260409020600281015460ff1615610ca35760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e48189d5c9b995960921b6044820152606401610663565b610cac826118ca565b805460098054600090610cc09084906121d7565b9091555050600201805460ff1916600117905550565b6000818152600260205260408120546001600160a01b0316806105545760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610663565b60006001600160a01b038216610db85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610663565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610dfe5760405162461bcd60e51b815260040161066390612136565b610e086000611965565b565b60606001805461056b90612265565b6001600160a01b038216331415610e725760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610663565b3360008181526005602090815260408083206001600160a01b0387168085529252909120805460ff1916841515179055906001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610edf911515815260200190565b60405180910390a35050565b610ef5338361179b565b610f115760405162461bcd60e51b81526004016106639061216b565b610f1d848484846119b7565b50505050565b33610f2d84610cd6565b6001600160a01b031614610f725760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610663565b6000828152600d6020908152604080832086845290915290205460ff16816002811115610faf57634e487b7160e01b600052602160045260246000fd5b816002811115610fcf57634e487b7160e01b600052602160045260246000fd5b14610f1d576000600c8481548110610ff757634e487b7160e01b600052603260045260246000fd5b90600052602060002090600602019050601054816001015461101991906121d7565b431061105f5760405162461bcd60e51b8152602060048201526015602482015274159bdd1a5b99c81c195c9a5bd908195b185c1cd959605a1b6044820152606401610663565b6000858152600b6020526040902060018082015490830154116110c45760405162461bcd60e51b815260206004820181905260248201527f416c6c6f636174696f6e206d75737420707265646174652070726f706f73616c6044820152606401610663565b6000858152600d6020908152604080832089845290915281205460ff16600281111561110057634e487b7160e01b600052602160045260246000fd5b141561119857600184600281111561112857634e487b7160e01b600052602160045260246000fd5b141561114f5780546003830180546000906111449084906121d7565b909155506111939050565b600284600281111561117157634e487b7160e01b600052602160045260246000fd5b141561119357805460048301805460009061118d9084906121d7565b90915550505b611228565b60018360028111156111ba57634e487b7160e01b600052602160045260246000fd5b14156111f15780546003830180546000906111d6908490612222565b9091555050805460048301805460009061118d9084906121d7565b8054600483018054600090611207908490612222565b909155505080546003830180546000906112229084906121d7565b90915550505b6000858152600d602090815260408083208984529091529020805485919060ff1916600183600281111561126c57634e487b7160e01b600052602160045260246000fd5b02179055507fecee8152b57911921db27097b253bd3438bbf5b1bcfd972ab59843c63f45a0418686866040516112a4939291906121bc565b60405180910390a1505050505050565b6000818152600260205260409020546060906001600160a01b03166113335760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610663565b600061134a60408051602081019091526000815290565b9050600081511161136a5760405180602001604052806000815250611395565b80611374846119ea565b604051602001611385929190612057565b6040516020818303038152906040525b9392505050565b6001600160a01b0380831660009081526005602090815260408083209385168352929052205460ff165b92915050565b60085481116114295760405162461bcd60e51b815260206004820152602360248201527f50726f706f73656420737570706c79206d757374206578636565642063757272604482015262195b9d60ea1b6064820152608401610663565b61146d6040518060c0016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581525090565b33808252436020830152604082018390526006546001600160a01b031614611515573361149984610cd6565b6001600160a01b0316146114de5760405162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b6044820152606401610663565b6000838152600b60209081526040808320546060850152600c548352600d82528083208684529091529020805460ff191660011790555b600c805460018082018355600083905283517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7600690930292830180546001600160a01b0319166001600160a01b0390921691909117905560208401517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c883015560408401517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c983015560608401517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8ca83015560808401517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8cb83015560a08401517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8cc909201805460ff19169215159290921790915590547f5b08de95ac675a3c33acd3819e0667b9f3fe62d8ef95dee802819d7622dd6f189161167791612222565b60408051918252602082018590523390820152606001610a01565b6006546001600160a01b031633146116bc5760405162461bcd60e51b815260040161066390612136565b6001600160a01b0381166117215760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610663565b61172a81611965565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061176282610cd6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166118145760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610663565b600061181f83610cd6565b9050806001600160a01b0316846001600160a01b0316148061185a5750836001600160a01b031661184f846105ee565b6001600160a01b0316145b8061186a575061186a818561139c565b949350505050565b60405162461bcd60e51b815260206004820152600f60248201526e4e6f6e7472616e7366657261626c6560881b6044820152606401610663565b6118c6828260405180602001604052806000815250611b05565b5050565b60006118d582610cd6565b90506118e260008361172d565b6001600160a01b038116600090815260036020526040812080546001929061190b908490612222565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6119c2848484611872565b6119ce84848484611b38565b610f1d5760405162461bcd60e51b8152600401610663906120e4565b606081611a0f57506040805180820190915260018152600360fc1b6020820152610557565b8160005b8115611a395780611a23816122a0565b9150611a329050600a836121ef565b9150611a13565b60008167ffffffffffffffff811115611a6257634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611a8c576020820181803683370190505b5090505b841561186a57611aa1600183612222565b9150611aae600a866122bb565b611ab99060306121d7565b60f81b818381518110611adc57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611afe600a866121ef565b9450611a90565b611b0f8383611c45565b611b1c6000848484611b38565b6107995760405162461bcd60e51b8152600401610663906120e4565b60006001600160a01b0384163b15611c3a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611b7c903390899088908890600401612086565b602060405180830381600087803b158015611b9657600080fd5b505af1925050508015611bc6575060408051601f3d908101601f19168201909252611bc391810190611f79565b60015b611c20573d808015611bf4576040519150601f19603f3d011682016040523d82523d6000602084013e611bf9565b606091505b508051611c185760405162461bcd60e51b8152600401610663906120e4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061186a565b506001949350505050565b6001600160a01b038216611c9b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610663565b6000818152600260205260409020546001600160a01b031615611d005760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610663565b6001600160a01b0382166000908152600360205260408120805460019290611d299084906121d7565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80356001600160a01b038116811461055757600080fd5b600060208284031215611daf578081fd5b61139582611d87565b60008060408385031215611dca578081fd5b611dd383611d87565b9150611de160208401611d87565b90509250929050565b600080600060608486031215611dfe578081fd5b611e0784611d87565b9250611e1560208501611d87565b9150604084013590509250925092565b60008060008060808587031215611e3a578081fd5b611e4385611d87565b9350611e5160208601611d87565b925060408501359150606085013567ffffffffffffffff80821115611e74578283fd5b818701915087601f830112611e87578283fd5b813581811115611e9957611e996122fb565b604051601f8201601f19908116603f01168101908382118183101715611ec157611ec16122fb565b816040528281528a6020848701011115611ed9578586fd5b82602086016020830137918201602001949094529598949750929550505050565b60008060408385031215611f0c578182fd5b611f1583611d87565b915060208301358015158114611f29578182fd5b809150509250929050565b60008060408385031215611f46578182fd5b611f4f83611d87565b946020939093013593505050565b600060208284031215611f6e578081fd5b813561139581612311565b600060208284031215611f8a578081fd5b815161139581612311565b600060208284031215611fa6578081fd5b5035919050565b60008060408385031215611fbf578182fd5b50508035926020909101359150565b600080600060608486031215611fe2578283fd5b8335925060208401359150604084013560038110611ffe578182fd5b809150509250925092565b60008151808452612021816020860160208601612239565b601f01601f19169290920160200192915050565b6003811061205357634e487b7160e01b600052602160045260246000fd5b9052565b60008351612069818460208801612239565b83519083019061207d818360208801612239565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906120b990830184612009565b9695505050505050565b602081016113c68284612035565b6000602082526113956020830184612009565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b838152602081018390526060810161186a6040830184612035565b600082198211156121ea576121ea6122cf565b500190565b6000826121fe576121fe6122e5565b500490565b600081600019048311821515161561221d5761221d6122cf565b500290565b600082821015612234576122346122cf565b500390565b60005b8381101561225457818101518382015260200161223c565b83811115610f1d5750506000910152565b600181811c9082168061227957607f821691505b6020821081141561229a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156122b4576122b46122cf565b5060010190565b6000826122ca576122ca6122e5565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461172a57600080fdfea2646970667358221220bf330f30196b6ffa6887c8ce166fa0ac98161bd603f2cd3abe404f624ffda6e964736f6c63430008030033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000e4e1c00000000000000000000000000000000000000000000000000000000000000018557162617220546f6b656e20446973747269627574696f6e00000000000000000000000000000000000000000000000000000000000000000000000000000004655a494700000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): Uqbar Token Distribution
Arg [1] : _symbol (string): eZIG
Arg [2] : _cap (uint256): 15000000
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000e4e1c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000018
Arg [4] : 557162617220546f6b656e20446973747269627574696f6e0000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 655a494700000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
35120:5034:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35714:36;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;6222:32:1;;;6204:51;;6286:2;6271:18;;6264:34;;;;6314:18;;;6307:34;;;;6372:2;6357:18;;6350:34;6415:3;6400:19;;6393:35;6472:14;6465:22;6242:3;6444:19;;6437:51;6191:3;6176:19;35714:36:0;;;;;;;;20645:305;;;;;;:::i;:::-;;:::i;:::-;;;6664:14:1;;6657:22;6639:41;;6627:2;6612:18;20645:305:0;6594:92:1;35926:35:0;;;;;;;;;17789:25:1;;;17777:2;17762:18;35926:35:0;17744:76:1;21590:100:0;;;:::i;:::-;;;;;;;:::i;23149:221::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5386:32:1;;;5368:51;;5356:2;5341:18;23149:221:0;5323:102:1;22672:411:0;;;;;;:::i;:::-;;:::i;:::-;;39387:764;;;;;;:::i;:::-;;:::i;35214:26::-;;;;;;24039:339;;;;;;:::i;:::-;;:::i;35173:34::-;;;;;;36545:515;;;;;;:::i;:::-;;:::i;24449:185::-;;;;;;:::i;:::-;;:::i;37068:278::-;;;;;;:::i;:::-;;:::i;35247:27::-;;;;;;35283:25;;;;;;21284:239;;;;;;:::i;:::-;;:::i;21014:208::-;;;;;;:::i;:::-;;:::i;34417:94::-;;;:::i;33766:87::-;33839:6;;-1:-1:-1;;;;;33839:6:0;33766:87;;21759:104;;;:::i;35872:47::-;;;;;;23442:295;;;;;;:::i;:::-;;:::i;24705:328::-;;;;;;:::i;:::-;;:::i;38114:1265::-;;;;;;:::i;:::-;;:::i;35757:57::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21934:334::-;;;;;;:::i;:::-;;:::i;23808:164::-;;;;;;:::i;:::-;;:::i;37392:714::-;;;;;;:::i;:::-;;:::i;34666:192::-;;;;;;:::i;:::-;;:::i;35823:42::-;;;;;;35424:46;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18624:25:1;;;18680:2;18665:18;;18658:34;;;;18735:14;18728:22;18708:18;;;18701:50;18612:2;18597:18;35424:46:0;18579:178:1;35714:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35714:36:0;;;;-1:-1:-1;35714:36:0;;;;;;;:::o;20645:305::-;20747:4;-1:-1:-1;;;;;;20784:40:0;;-1:-1:-1;;;20784:40:0;;:105;;-1:-1:-1;;;;;;;20841:48:0;;-1:-1:-1;;;20841:48:0;20784:105;:158;;;-1:-1:-1;;;;;;;;;;12885:40:0;;;20906:36;20764:178;;20645:305;;;;:::o;21590:100::-;21644:13;21677:5;21670:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21590:100;:::o;23149:221::-;23225:7;26632:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26632:16:0;23245:73;;;;-1:-1:-1;;;23245:73:0;;14031:2:1;23245:73:0;;;14013:21:1;14070:2;14050:18;;;14043:30;14109:34;14089:18;;;14082:62;-1:-1:-1;;;14160:18:1;;;14153:42;14212:19;;23245:73:0;;;;;;;;;-1:-1:-1;23338:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;23338:24:0;;23149:221::o;22672:411::-;22753:13;22769:23;22784:7;22769:14;:23::i;:::-;22753:39;;22817:5;-1:-1:-1;;;;;22811:11:0;:2;-1:-1:-1;;;;;22811:11:0;;;22803:57;;;;-1:-1:-1;;;22803:57:0;;15575:2:1;22803:57:0;;;15557:21:1;15614:2;15594:18;;;15587:30;15653:34;15633:18;;;15626:62;-1:-1:-1;;;15704:18:1;;;15697:31;15745:19;;22803:57:0;15547:223:1;22803:57:0;19179:10;-1:-1:-1;;;;;22895:21:0;;;;:62;;-1:-1:-1;22920:37:0;22937:5;19179:10;22944:12;19099:98;22920:37;22873:168;;;;-1:-1:-1;;;22873:168:0;;12424:2:1;22873:168:0;;;12406:21:1;12463:2;12443:18;;;12436:30;12502:34;12482:18;;;12475:62;12573:26;12553:18;;;12546:54;12617:19;;22873:168:0;12396:246:1;22873:168:0;23054:21;23063:2;23067:7;23054:8;:21::i;:::-;22672:411;;;:::o;39387:764::-;39446:35;39484:9;39494:4;39484:15;;;;;;-1:-1:-1;;;39484:15:0;;;;;;;;;;;;;;;;;;;39446:53;;39553:12;;39533:9;:17;;;:32;;;;:::i;:::-;39518:12;:47;39510:85;;;;-1:-1:-1;;;39510:85:0;;14805:2:1;39510:85:0;;;14787:21:1;14844:2;14824:18;;;14817:30;14883:27;14863:18;;;14856:55;14928:18;;39510:85:0;14777:175:1;39510:85:0;39615:18;;;;;;39614:19;39606:57;;;;-1:-1:-1;;;39606:57:0;;8831:2:1;39606:57:0;;;8813:21:1;8870:2;8850:18;;;8843:30;8909:27;8889:18;;;8882:55;8954:18;;39606:57:0;8803:175:1;39606:57:0;39709:11;;39682:9;:24;;;:38;39674:82;;;;-1:-1:-1;;;39674:82:0;;17485:2:1;39674:82:0;;;17467:21:1;17524:2;17504:18;;;17497:30;17563:33;17543:18;;;17536:61;17614:18;;39674:82:0;17457:181:1;39674:82:0;39769:14;39820:17;;39804:13;;39786:15;;:31;;;;:::i;:::-;:51;;;;:::i;:::-;39769:68;;39891:6;39873:9;:14;;;39856:9;:14;;;:31;;;;:::i;:::-;:41;;39848:86;;;;-1:-1:-1;;;39848:86:0;;10951:2:1;39848:86:0;;;10933:21:1;;;10970:18;;;10963:30;11029:34;11009:18;;;11002:62;11081:18;;39848:86:0;10923:182:1;39848:86:0;39970:9;:14;;;39953:9;:14;;;:31;39945:65;;;;-1:-1:-1;;;39945:65:0;;9903:2:1;39945:65:0;;;9885:21:1;9942:2;9922:18;;;9915:30;-1:-1:-1;;;9961:18:1;;;9954:51;10022:18;;39945:65:0;9875:171:1;39945:65:0;40037:24;;;;40023:11;:38;;;40072:18;;;:25;;-1:-1:-1;;40072:25:0;40093:4;40072:25;;;40125:11;40115:28;;;;;;40138:4;;17999:25:1;;;18055:2;18040:18;;18033:34;17987:2;17972:18;;17954:119;40115:28:0;;;;;;;;39387:764;;;:::o;24039:339::-;24234:41;19179:10;24267:7;24234:18;:41::i;:::-;24226:103;;;;-1:-1:-1;;;24226:103:0;;;;;;;:::i;:::-;24342:28;24352:4;24358:2;24362:7;24342:9;:28::i;36545:515::-;33839:6;;36617:10;;-1:-1:-1;;;;;33839:6:0;19179:10;33986:23;33978:68;;;;-1:-1:-1;;;33978:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36648:17:0;::::1;::::0;;::::1;::::0;:41:::1;;-1:-1:-1::0;;;;;;36669:20:0;::::1;36684:4;36669:20;;36648:41;:59;;;;-1:-1:-1::0;33839:6:0;;-1:-1:-1;;;;;36693:14:0;;::::1;33839:6:::0;;36693:14:::1;;36648:59;36640:87;;;::::0;-1:-1:-1;;;36640:87:0;;7320:2:1;36640:87:0::1;::::0;::::1;7302:21:1::0;7359:2;7339:18;;;7332:30;-1:-1:-1;;;7378:18:1;;;7371:45;7433:18;;36640:87:0::1;7292:165:1::0;36640:87:0::1;36756:1;36746:7;:11;36738:38;;;::::0;-1:-1:-1;;;36738:38:0;;16395:2:1;36738:38:0::1;::::0;::::1;16377:21:1::0;16434:2;16414:18;;;16407:30;-1:-1:-1;;;16453:18:1;;;16446:44;16507:18;;36738:38:0::1;16367:164:1::0;36738:38:0::1;36824:11;;36813:7;36795:15;;:25;;;;:::i;:::-;:40;;36787:73;;;::::0;-1:-1:-1;;;36787:73:0;;11312:2:1;36787:73:0::1;::::0;::::1;11294:21:1::0;11351:2;11331:18;;;11324:30;-1:-1:-1;;;11370:18:1;;;11363:50;11430:18;;36787:73:0::1;11284:170:1::0;36787:73:0::1;-1:-1:-1::0;36878:6:0::1;::::0;36918:36:::1;::::0;;::::1;::::0;::::1;::::0;;;;;36934:12:::1;36918:36;::::0;;::::1;::::0;;;-1:-1:-1;36918:36:0;;;;;;36895:20;;;:12:::1;:20:::0;;;;;;:59;;;;;;36918:36;36895:59;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;36895:59:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36965:15:::1;:26:::0;;36918:36;;-1:-1:-1;36965:26:0::1;::::0;36918:36;;36965:26:::1;:::i;:::-;::::0;;;-1:-1:-1;37002:18:0::1;::::0;-1:-1:-1;37012:3:0;37017:2;37002:9:::1;:18::i;:::-;37051:1;37041:6;;:11;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;36545:515:0;;;-1:-1:-1;;;36545:515:0:o;24449:185::-;24587:39;24604:4;24610:2;24614:7;24587:39;;;;;;;;;;;;:16;:39::i;37068:278::-;33839:6;;-1:-1:-1;;;;;33839:6:0;19179:10;33986:23;33978:68;;;;-1:-1:-1;;;33978:68:0;;;;;;;:::i;:::-;37125:27:::1;37155:17:::0;;;:12:::1;:17;::::0;;;;37192:19:::1;::::0;::::1;::::0;::::1;;37191:20;37183:47;;;::::0;-1:-1:-1;;;37183:47:0;;16738:2:1;37183:47:0::1;::::0;::::1;16720:21:1::0;16777:2;16757:18;;;16750:30;-1:-1:-1;;;16796:18:1;;;16789:44;16850:18;;37183:47:0::1;16710:164:1::0;37183:47:0::1;37241:10;37247:3;37241:5;:10::i;:::-;37278:23:::0;;37262:12:::1;:39:::0;;37278:23:::1;::::0;37262:39:::1;::::0;37278:23;;37262:39:::1;:::i;:::-;::::0;;;-1:-1:-1;;37312:19:0::1;;:26:::0;;-1:-1:-1;;37312:26:0::1;37334:4;37312:26;::::0;;-1:-1:-1;37068:278:0:o;21284:239::-;21356:7;21392:16;;;:7;:16;;;;;;-1:-1:-1;;;;;21392:16:0;21427:19;21419:73;;;;-1:-1:-1;;;21419:73:0;;13260:2:1;21419:73:0;;;13242:21:1;13299:2;13279:18;;;13272:30;13338:34;13318:18;;;13311:62;-1:-1:-1;;;13389:18:1;;;13382:39;13438:19;;21419:73:0;13232:231:1;21014:208:0;21086:7;-1:-1:-1;;;;;21114:19:0;;21106:74;;;;-1:-1:-1;;;21106:74:0;;12849:2:1;21106:74:0;;;12831:21:1;12888:2;12868:18;;;12861:30;12927:34;12907:18;;;12900:62;-1:-1:-1;;;12978:18:1;;;12971:40;13028:19;;21106:74:0;12821:232:1;21106:74:0;-1:-1:-1;;;;;;21198:16:0;;;;;:9;:16;;;;;;;21014:208::o;34417:94::-;33839:6;;-1:-1:-1;;;;;33839:6:0;19179:10;33986:23;33978:68;;;;-1:-1:-1;;;33978:68:0;;;;;;;:::i;:::-;34482:21:::1;34500:1;34482:9;:21::i;:::-;34417:94::o:0;21759:104::-;21815:13;21848:7;21841:14;;;;;:::i;23442:295::-;-1:-1:-1;;;;;23545:24:0;;19179:10;23545:24;;23537:62;;;;-1:-1:-1;;;23537:62:0;;10253:2:1;23537:62:0;;;10235:21:1;10292:2;10272:18;;;10265:30;10331:27;10311:18;;;10304:55;10376:18;;23537:62:0;10225:175:1;23537:62:0;19179:10;23612:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;23612:42:0;;;;;;;;;;:53;;-1:-1:-1;;23612:53:0;;;;;;;:42;-1:-1:-1;;;;;23681:48:0;;23720:8;23681:48;;;;6664:14:1;6657:22;6639:41;;6627:2;6612:18;;6594:92;23681:48:0;;;;;;;;23442:295;;:::o;24705:328::-;24880:41;19179:10;24913:7;24880:18;:41::i;:::-;24872:103;;;;-1:-1:-1;;;24872:103:0;;;;;;;:::i;:::-;24986:39;25000:4;25006:2;25010:7;25019:5;24986:13;:39::i;:::-;24705:328;;;;:::o;38114:1265::-;38228:10;38207:17;38215:8;38207:7;:17::i;:::-;-1:-1:-1;;;;;38207:31:0;;38199:56;;;;-1:-1:-1;;;38199:56:0;;7664:2:1;38199:56:0;;;7646:21:1;7703:2;7683:18;;;7676:30;-1:-1:-1;;;7722:18:1;;;7715:42;7774:18;;38199:56:0;7636:162:1;38199:56:0;38276:9;38288:18;;;:5;:18;;;;;;;;:28;;;;;;;;;;;38339:5;38331:13;;;;;;-1:-1:-1;;;38331:13:0;;;;;;;;;:4;:13;;;;;;-1:-1:-1;;;38331:13:0;;;;;;;;;;38327:1045;;38361:35;38399:9;38409:11;38399:22;;;;;;-1:-1:-1;;;38399:22:0;;;;;;;;;;;;;;;;;;;38361:60;;38479:12;;38459:9;:17;;;:32;;;;:::i;:::-;38444:12;:47;38436:81;;;;-1:-1:-1;;;38436:81:0;;12074:2:1;38436:81:0;;;12056:21:1;12113:2;12093:18;;;12086:30;-1:-1:-1;;;12132:18:1;;;12125:51;12193:18;;38436:81:0;12046:171:1;38436:81:0;38534:27;38564:22;;;:12;:22;;;;;38629:20;;;;;38609:17;;;;:40;38601:85;;;;-1:-1:-1;;;38601:85:0;;9542:2:1;38601:85:0;;;9524:21:1;;;9561:18;;;9554:30;9620:34;9600:18;;;9593:62;9672:18;;38601:85:0;9514:182:1;38601:85:0;38739:11;38707:18;;;:5;:18;;;;;;;;:28;;;;;;;;;;;:43;;;;;;-1:-1:-1;;;38707:43:0;;;;;;;;;;38703:550;;;38784:8;38775:5;:17;;;;;;-1:-1:-1;;;38775:17:0;;;;;;;;;;38771:161;;;38814:23;;38796:14;;;:41;;38814:23;;38796:41;;38814:23;;38796:41;:::i;:::-;;;;-1:-1:-1;38771:161:0;;-1:-1:-1;38771:161:0;;38876:8;38867:5;:17;;;;;;-1:-1:-1;;;38867:17:0;;;;;;;;;;38863:69;;;38906:23;;38888:14;;;:41;;38906:23;;38888:41;;38906:23;;38888:41;:::i;:::-;;;;-1:-1:-1;;38863:69:0;38703:550;;;38965:8;38957:4;:16;;;;;;-1:-1:-1;;;38957:16:0;;;;;;;;;;38953:300;;;39012:23;;38994:14;;;:41;;39012:23;;38994:41;;39012:23;;38994:41;:::i;:::-;;;;-1:-1:-1;;39072:23:0;;39054:14;;;:41;;39072:23;;39054:41;;39072:23;;39054:41;:::i;38953:300::-;39154:23;;39136:14;;;:41;;39154:23;;39136:41;;39154:23;;39136:41;:::i;:::-;;;;-1:-1:-1;;39214:23:0;;39196:14;;;:41;;39214:23;;39196:41;;39214:23;;39196:41;:::i;:::-;;;;-1:-1:-1;;38953:300:0;39267:18;;;;:5;:18;;;;;;;;:28;;;;;;;;:36;;39298:5;;39267:28;-1:-1:-1;;39267:36:0;;39298:5;39267:36;;;;;;-1:-1:-1;;;39267:36:0;;;;;;;;;;;;;;39325:35;39331:8;39341:11;39354:5;39325:35;;;;;;;;:::i;:::-;;;;;;;;38327:1045;;38114:1265;;;;:::o;21934:334::-;26608:4;26632:16;;;:7;:16;;;;;;22007:13;;-1:-1:-1;;;;;26632:16:0;22033:76;;;;-1:-1:-1;;;22033:76:0;;15159:2:1;22033:76:0;;;15141:21:1;15198:2;15178:18;;;15171:30;15237:34;15217:18;;;15210:62;-1:-1:-1;;;15288:18:1;;;15281:45;15343:19;;22033:76:0;15131:237:1;22033:76:0;22122:21;22146:10;22593:9;;;;;;;;;-1:-1:-1;22593:9:0;;22516:94;;22146:10;22122:34;;22198:1;22180:7;22174:21;:25;:86;;;;;;;;;;;;;;;;;22226:7;22235:18;:7;:16;:18::i;:::-;22209:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22174:86;22167:93;21934:334;-1:-1:-1;;;21934:334:0:o;23808:164::-;-1:-1:-1;;;;;23929:25:0;;;23905:4;23929:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;23808:164;;;;;:::o;37392:714::-;37507:11;;37489:15;:29;37481:77;;;;-1:-1:-1;;;37481:77:0;;17081:2:1;37481:77:0;;;17063:21:1;17120:2;17100:18;;;17093:30;17159:34;17139:18;;;17132:62;-1:-1:-1;;;17210:18:1;;;17203:33;17253:19;;37481:77:0;17053:225:1;37481:77:0;37571:33;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37571:33:0;37635:10;37615:30;;;37675:12;37656:16;;;:31;37698:23;;;:41;;;33839:6;;-1:-1:-1;;;;;33839:6:0;37756:21;37752:233;;37823:10;37802:17;37810:8;37802:7;:17::i;:::-;-1:-1:-1;;;;;37802:31:0;;37794:56;;;;-1:-1:-1;;;37794:56:0;;7664:2:1;37794:56:0;;;7646:21:1;7703:2;7683:18;;;7676:30;-1:-1:-1;;;7722:18:1;;;7715:42;7774:18;;37794:56:0;7636:162:1;37794:56:0;37881:22;;;;:12;:22;;;;;;;;:33;37865:13;;;:49;37935:9;:16;37929:23;;:5;:23;;;;;:33;;;;;;;;:44;;-1:-1:-1;;37929:44:0;37965:8;37929:44;;;37752:233;37997:9;:24;;;;;;;;-1:-1:-1;37997:24:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37997:24:0;-1:-1:-1;;;;;37997:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37997:24:0;;;;;;;;;;;38048:16;;38039:59;;38048:20;;;:::i;:::-;38039:59;;;18280:25:1;;;18336:2;18321:18;;18314:34;;;38087:10:0;18364:18:1;;;18357:60;18268:2;18253:18;38039:59:0;18235:188:1;34666:192:0;33839:6;;-1:-1:-1;;;;;33839:6:0;19179:10;33986:23;33978:68;;;;-1:-1:-1;;;33978:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34755:22:0;::::1;34747:73;;;::::0;-1:-1:-1;;;34747:73:0;;8424:2:1;34747:73:0::1;::::0;::::1;8406:21:1::0;8463:2;8443:18;;;8436:30;8502:34;8482:18;;;8475:62;-1:-1:-1;;;8553:18:1;;;8546:36;8599:19;;34747:73:0::1;8396:228:1::0;34747:73:0::1;34831:19;34841:8;34831:9;:19::i;:::-;34666:192:::0;:::o;30525:174::-;30600:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;30600:29:0;-1:-1:-1;;;;;30600:29:0;;;;;;;;:24;;30654:23;30600:24;30654:14;:23::i;:::-;-1:-1:-1;;;;;30645:46:0;;;;;;;;;;;30525:174;;:::o;26837:348::-;26930:4;26632:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26632:16:0;26947:73;;;;-1:-1:-1;;;26947:73:0;;11661:2:1;26947:73:0;;;11643:21:1;11700:2;11680:18;;;11673:30;11739:34;11719:18;;;11712:62;-1:-1:-1;;;11790:18:1;;;11783:42;11842:19;;26947:73:0;11633:234:1;26947:73:0;27031:13;27047:23;27062:7;27047:14;:23::i;:::-;27031:39;;27100:5;-1:-1:-1;;;;;27089:16:0;:7;-1:-1:-1;;;;;27089:16:0;;:51;;;;27133:7;-1:-1:-1;;;;;27109:31:0;:20;27121:7;27109:11;:20::i;:::-;-1:-1:-1;;;;;27109:31:0;;27089:51;:87;;;;27144:32;27161:5;27168:7;27144:16;:32::i;:::-;27081:96;26837:348;-1:-1:-1;;;;26837:348:0:o;36384:127::-;36478:25;;-1:-1:-1;;;36478:25:0;;10607:2:1;36478:25:0;;;10589:21:1;10646:2;10626:18;;;10619:30;-1:-1:-1;;;10665:18:1;;;10658:45;10720:18;;36478:25:0;10579:165:1;27527:110:0;27603:26;27613:2;27617:7;27603:26;;;;;;;;;;;;:9;:26::i;:::-;27527:110;;:::o;29132:360::-;29192:13;29208:23;29223:7;29208:14;:23::i;:::-;29192:39;;29333:29;29350:1;29354:7;29333:8;:29::i;:::-;-1:-1:-1;;;;;29375:16:0;;;;;;:9;:16;;;;;:21;;29395:1;;29375:16;:21;;29395:1;;29375:21;:::i;:::-;;;;-1:-1:-1;;29414:16:0;;;;:7;:16;;;;;;29407:23;;-1:-1:-1;;;;;;29407:23:0;;;29448:36;29422:7;;29414:16;-1:-1:-1;;;;;29448:36:0;;;;;29414:16;;29448:36;29132:360;;:::o;34866:173::-;34941:6;;;-1:-1:-1;;;;;34958:17:0;;;-1:-1:-1;;;;;;34958:17:0;;;;;;;34991:40;;34941:6;;;34958:17;34941:6;;34991:40;;34922:16;;34991:40;34866:173;;:::o;25915:315::-;26072:28;26082:4;26088:2;26092:7;26072:9;:28::i;:::-;26119:48;26142:4;26148:2;26152:7;26161:5;26119:22;:48::i;:::-;26111:111;;;;-1:-1:-1;;;26111:111:0;;;;;;;:::i;311:723::-;367:13;588:10;584:53;;-1:-1:-1;615:10:0;;;;;;;;;;;;-1:-1:-1;;;615:10:0;;;;;;584:53;662:5;647:12;703:78;710:9;;703:78;;736:8;;;;:::i;:::-;;-1:-1:-1;759:10:0;;-1:-1:-1;767:2:0;759:10;;:::i;:::-;;;703:78;;;791:19;823:6;813:17;;;;;;-1:-1:-1;;;813:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;813:17:0;;791:39;;841:154;848:10;;841:154;;875:11;885:1;875:11;;:::i;:::-;;-1:-1:-1;944:10:0;952:2;944:5;:10;:::i;:::-;931:24;;:2;:24;:::i;:::-;918:39;;901:6;908;901:14;;;;;;-1:-1:-1;;;901:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;901:56:0;;;;;;;;-1:-1:-1;972:11:0;981:2;972:11;;:::i;:::-;;;841:154;;27864:321;27994:18;28000:2;28004:7;27994:5;:18::i;:::-;28045:54;28076:1;28080:2;28084:7;28093:5;28045:22;:54::i;:::-;28023:154;;;;-1:-1:-1;;;28023:154:0;;;;;;;:::i;31264:799::-;31419:4;-1:-1:-1;;;;;31440:13:0;;3159:20;3207:8;31436:620;;31476:72;;-1:-1:-1;;;31476:72:0;;-1:-1:-1;;;;;31476:36:0;;;;;:72;;19179:10;;31527:4;;31533:7;;31542:5;;31476:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31476:72:0;;;;;;;;-1:-1:-1;;31476:72:0;;;;;;;;;;;;:::i;:::-;;;31472:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31718:13:0;;31714:272;;31761:60;;-1:-1:-1;;;31761:60:0;;;;;;;:::i;31714:272::-;31936:6;31930:13;31921:6;31917:2;31913:15;31906:38;31472:529;-1:-1:-1;;;;;;31599:51:0;-1:-1:-1;;;31599:51:0;;-1:-1:-1;31592:58:0;;31436:620;-1:-1:-1;32040:4:0;31264:799;;;;;;:::o;28521:382::-;-1:-1:-1;;;;;28601:16:0;;28593:61;;;;-1:-1:-1;;;28593:61:0;;13670:2:1;28593:61:0;;;13652:21:1;;;13689:18;;;13682:30;13748:34;13728:18;;;13721:62;13800:18;;28593:61:0;13642:182:1;28593:61:0;26608:4;26632:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26632:16:0;:30;28665:58;;;;-1:-1:-1;;;28665:58:0;;9185:2:1;28665:58:0;;;9167:21:1;9224:2;9204:18;;;9197:30;9263;9243:18;;;9236:58;9311:18;;28665:58:0;9157:178:1;28665:58:0;-1:-1:-1;;;;;28794:13:0;;;;;;:9;:13;;;;;:18;;28811:1;;28794:13;:18;;28811:1;;28794:18;:::i;:::-;;;;-1:-1:-1;;28823:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;28823:21:0;-1:-1:-1;;;;;28823:21:0;;;;;;;;28862:33;;28823:16;;;28862:33;;28823:16;;28862:33;28521:382;;:::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:196;;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;393:270::-;;;522:2;510:9;501:7;497:23;493:32;490:2;;;543:6;535;528:22;490:2;571:29;590:9;571:29;:::i;:::-;561:39;;619:38;653:2;642:9;638:18;619:38;:::i;:::-;609:48;;480:183;;;;;:::o;668:338::-;;;;814:2;802:9;793:7;789:23;785:32;782:2;;;835:6;827;820:22;782:2;863:29;882:9;863:29;:::i;:::-;853:39;;911:38;945:2;934:9;930:18;911:38;:::i;:::-;901:48;;996:2;985:9;981:18;968:32;958:42;;772:234;;;;;:::o;1011:1183::-;;;;;1183:3;1171:9;1162:7;1158:23;1154:33;1151:2;;;1205:6;1197;1190:22;1151:2;1233:29;1252:9;1233:29;:::i;:::-;1223:39;;1281:38;1315:2;1304:9;1300:18;1281:38;:::i;:::-;1271:48;;1366:2;1355:9;1351:18;1338:32;1328:42;;1421:2;1410:9;1406:18;1393:32;1444:18;1485:2;1477:6;1474:14;1471:2;;;1506:6;1498;1491:22;1471:2;1549:6;1538:9;1534:22;1524:32;;1594:7;1587:4;1583:2;1579:13;1575:27;1565:2;;1621:6;1613;1606:22;1565:2;1662;1649:16;1684:2;1680;1677:10;1674:2;;;1690:18;;:::i;:::-;1765:2;1759:9;1733:2;1819:13;;-1:-1:-1;;1815:22:1;;;1839:2;1811:31;1807:40;1795:53;;;1863:18;;;1883:22;;;1860:46;1857:2;;;1909:18;;:::i;:::-;1949:10;1945:2;1938:22;1984:2;1976:6;1969:18;2024:7;2019:2;2014;2010;2006:11;2002:20;1999:33;1996:2;;;2050:6;2042;2035:22;1996:2;2111;2106;2102;2098:11;2093:2;2085:6;2081:15;2068:46;2134:15;;;2151:2;2130:24;2123:40;;;;1141:1053;;;;-1:-1:-1;1141:1053:1;;-1:-1:-1;;;;1141:1053:1:o;2199:367::-;;;2325:2;2313:9;2304:7;2300:23;2296:32;2293:2;;;2346:6;2338;2331:22;2293:2;2374:29;2393:9;2374:29;:::i;:::-;2364:39;;2453:2;2442:9;2438:18;2425:32;2500:5;2493:13;2486:21;2479:5;2476:32;2466:2;;2527:6;2519;2512:22;2466:2;2555:5;2545:15;;;2283:283;;;;;:::o;2571:264::-;;;2700:2;2688:9;2679:7;2675:23;2671:32;2668:2;;;2721:6;2713;2706:22;2668:2;2749:29;2768:9;2749:29;:::i;:::-;2739:39;2825:2;2810:18;;;;2797:32;;-1:-1:-1;;;2658:177:1:o;2840:255::-;;2951:2;2939:9;2930:7;2926:23;2922:32;2919:2;;;2972:6;2964;2957:22;2919:2;3016:9;3003:23;3035:30;3059:5;3035:30;:::i;3100:259::-;;3222:2;3210:9;3201:7;3197:23;3193:32;3190:2;;;3243:6;3235;3228:22;3190:2;3280:9;3274:16;3299:30;3323:5;3299:30;:::i;3364:190::-;;3476:2;3464:9;3455:7;3451:23;3447:32;3444:2;;;3497:6;3489;3482:22;3444:2;-1:-1:-1;3525:23:1;;3434:120;-1:-1:-1;3434:120:1:o;3559:258::-;;;3688:2;3676:9;3667:7;3663:23;3659:32;3656:2;;;3709:6;3701;3694:22;3656:2;-1:-1:-1;;3737:23:1;;;3807:2;3792:18;;;3779:32;;-1:-1:-1;3646:171:1:o;3822:421::-;;;;3977:2;3965:9;3956:7;3952:23;3948:32;3945:2;;;3998:6;3990;3983:22;3945:2;4039:9;4026:23;4016:33;;4096:2;4085:9;4081:18;4068:32;4058:42;;4150:2;4139:9;4135:18;4122:32;4183:1;4176:5;4173:12;4163:2;;4204:6;4196;4189:22;4163:2;4232:5;4222:15;;;3935:308;;;;;:::o;4248:257::-;;4327:5;4321:12;4354:6;4349:3;4342:19;4370:63;4426:6;4419:4;4414:3;4410:14;4403:4;4396:5;4392:16;4370:63;:::i;:::-;4487:2;4466:15;-1:-1:-1;;4462:29:1;4453:39;;;;4494:4;4449:50;;4297:208;-1:-1:-1;;4297:208:1:o;4510:232::-;4586:1;4579:5;4576:12;4566:2;;4631:10;4626:3;4622:20;4619:1;4612:31;4666:4;4663:1;4656:15;4694:4;4691:1;4684:15;4566:2;4718:18;;4556:186::o;4747:470::-;;4964:6;4958:13;4980:53;5026:6;5021:3;5014:4;5006:6;5002:17;4980:53;:::i;:::-;5096:13;;5055:16;;;;5118:57;5096:13;5055:16;5152:4;5140:17;;5118:57;:::i;:::-;5191:20;;4934:283;-1:-1:-1;;;;4934:283:1:o;5430:488::-;-1:-1:-1;;;;;5699:15:1;;;5681:34;;5751:15;;5746:2;5731:18;;5724:43;5798:2;5783:18;;5776:34;;;5846:3;5841:2;5826:18;;5819:31;;;5430:488;;5867:45;;5892:19;;5884:6;5867:45;:::i;:::-;5859:53;5633:285;-1:-1:-1;;;;;;5633:285:1:o;6691:198::-;6832:2;6817:18;;6844:39;6821:9;6865:6;6844:39;:::i;6894:219::-;;7043:2;7032:9;7025:21;7063:44;7103:2;7092:9;7088:18;7080:6;7063:44;:::i;7803:414::-;8005:2;7987:21;;;8044:2;8024:18;;;8017:30;8083:34;8078:2;8063:18;;8056:62;-1:-1:-1;;;8149:2:1;8134:18;;8127:48;8207:3;8192:19;;7977:240::o;14242:356::-;14444:2;14426:21;;;14463:18;;;14456:30;14522:34;14517:2;14502:18;;14495:62;14589:2;14574:18;;14416:182::o;15775:413::-;15977:2;15959:21;;;16016:2;15996:18;;;15989:30;16055:34;16050:2;16035:18;;16028:62;-1:-1:-1;;;16121:2:1;16106:18;;16099:47;16178:3;16163:19;;15949:239::o;18762:340::-;18971:25;;;19027:2;19012:18;;19005:34;;;18959:2;18944:18;;19048:48;19092:2;19077:18;;19069:6;19048:48;:::i;19107:128::-;;19178:1;19174:6;19171:1;19168:13;19165:2;;;19184:18;;:::i;:::-;-1:-1:-1;19220:9:1;;19155:80::o;19240:120::-;;19306:1;19296:2;;19311:18;;:::i;:::-;-1:-1:-1;19345:9:1;;19286:74::o;19365:168::-;;19471:1;19467;19463:6;19459:14;19456:1;19453:21;19448:1;19441:9;19434:17;19430:45;19427:2;;;19478:18;;:::i;:::-;-1:-1:-1;19518:9:1;;19417:116::o;19538:125::-;;19606:1;19603;19600:8;19597:2;;;19611:18;;:::i;:::-;-1:-1:-1;19648:9:1;;19587:76::o;19668:258::-;19740:1;19750:113;19764:6;19761:1;19758:13;19750:113;;;19840:11;;;19834:18;19821:11;;;19814:39;19786:2;19779:10;19750:113;;;19881:6;19878:1;19875:13;19872:2;;;-1:-1:-1;;19916:1:1;19898:16;;19891:27;19721:205::o;19931:380::-;20010:1;20006:12;;;;20053;;;20074:2;;20128:4;20120:6;20116:17;20106:27;;20074:2;20181;20173:6;20170:14;20150:18;20147:38;20144:2;;;20227:10;20222:3;20218:20;20215:1;20208:31;20262:4;20259:1;20252:15;20290:4;20287:1;20280:15;20144:2;;19986:325;;;:::o;20316:135::-;;-1:-1:-1;;20376:17:1;;20373:2;;;20396:18;;:::i;:::-;-1:-1:-1;20443:1:1;20432:13;;20363:88::o;20456:112::-;;20514:1;20504:2;;20519:18;;:::i;:::-;-1:-1:-1;20553:9:1;;20494:74::o;20573:127::-;20634:10;20629:3;20625:20;20622:1;20615:31;20665:4;20662:1;20655:15;20689:4;20686:1;20679:15;20705:127;20766:10;20761:3;20757:20;20754:1;20747:31;20797:4;20794:1;20787:15;20821:4;20818:1;20811:15;20837:127;20898:10;20893:3;20889:20;20886:1;20879:31;20929:4;20926:1;20919:15;20953:4;20950:1;20943:15;20969:131;-1:-1:-1;;;;;;21043:32:1;;21033:43;;21023:2;;21090:1;21087;21080:12
Swarm Source
ipfs://bf330f30196b6ffa6887c8ce166fa0ac98161bd603f2cd3abe404f624ffda6e9
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.