Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
155 LLCB
Holders
155
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LLxCCxZen
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-25 */ // SPDX-License-Identifier: MIT 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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: balance query for the zero address"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } pragma solidity ^0.8.0; contract LLxCCxZen is ERC1155, Ownable { string public name; string public symbol; mapping(uint => string) public tokenURI; constructor() ERC1155("") { name = "Long Lost Collaborations"; symbol = "LLCB"; } function mintTo(address[] memory _to, uint _id, uint _amount) external onlyOwner { for (uint256 i = 0; i < _to.length; i++) { _mint(_to[i], _id, _amount, ""); } } function mint(address _to, uint _id, uint _amount) external onlyOwner { _mint(_to, _id, _amount, ""); } function mintBatch(address _to, uint[] memory _ids, uint[] memory _amounts) external onlyOwner { _mintBatch(_to, _ids, _amounts, ""); } function burn(uint _id, uint _amount) external { _burn(msg.sender, _id, _amount); } function burnBatch(uint[] memory _ids, uint[] memory _amounts) external { _burnBatch(msg.sender, _ids, _amounts); } function burnForMint(address _from, uint[] memory _burnIds, uint[] memory _burnAmounts, uint[] memory _mintIds, uint[] memory _mintAmounts) external onlyOwner { _burnBatch(_from, _burnIds, _burnAmounts); _mintBatch(_from, _mintIds, _mintAmounts, ""); } function setURI(uint _id, string memory _uri) external onlyOwner { tokenURI[_id] = _uri; emit URI(_uri, _id); } function uri(uint _id) public override view returns (string memory) { return tokenURI[_id]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_burnIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_burnAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintAmounts","type":"uint256[]"}],"name":"burnForMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","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":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","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":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","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":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040805160208101909152600081526200002c81620000b3565b506200003833620000cc565b6040805180820190915260188082527f4c6f6e67204c6f737420436f6c6c61626f726174696f6e73000000000000000060209092019182526200007e916004916200011e565b5060408051808201909152600480825263262621a160e11b6020909201918252620000ac916005916200011e565b5062000201565b8051620000c89060029060208401906200011e565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200012c90620001c4565b90600052602060002090601f0160209004810192826200015057600085556200019b565b82601f106200016b57805160ff19168380011785556200019b565b828001600101855582156200019b579182015b828111156200019b5782518255916020019190600101906200017e565b50620001a9929150620001ad565b5090565b5b80821115620001a95760008155600101620001ae565b600181811c90821680620001d957607f821691505b60208210811415620001fb57634e487b7160e01b600052602260045260246000fd5b50919050565b6121ef80620002116000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c806383ca4b6f116100b8578063b390c0ab1161007c578063b390c0ab1461027e578063c87b56dd14610291578063d81d0a15146102a4578063e985e9c5146102b7578063f242432a146102f3578063f2fde38b1461030657600080fd5b806383ca4b6f14610222578063862440e2146102355780638da5cb5b1461024857806395d89b4114610263578063a22cb4651461026b57600080fd5b80632bee43cf116100ff5780632bee43cf146101c15780632eb2c2d6146101d45780634e1273f4146101e7578063510f410414610207578063715018a61461021a57600080fd5b8062fdd58e1461013b57806301ffc9a71461016157806306fdde03146101845780630e89341c14610199578063156e29f6146101ac575b600080fd5b61014e610149366004611a5c565b610319565b6040519081526020015b60405180910390f35b61017461016f366004611b9f565b6103b0565b6040519015158152602001610158565b61018c610402565b6040516101589190611dd0565b61018c6101a7366004611bd9565b610490565b6101bf6101ba366004611a86565b610532565b005b6101bf6101cf366004611b1c565b61057c565b6101bf6101e23660046117f0565b6105fe565b6101fa6101f5366004611ab9565b610695565b6040516101589190611d8f565b6101bf610215366004611970565b6107be565b6101bf61080e565b6101bf610230366004611b69565b610844565b6101bf610243366004611bf2565b610853565b6003546040516001600160a01b039091168152602001610158565b61018c6108d9565b6101bf610279366004611a20565b6108e6565b6101bf61028c366004611c42565b6108f1565b61018c61029f366004611bd9565b6108fc565b6101bf6102b23660046118fd565b610915565b6101746102c53660046117bd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101bf610301366004611899565b61095a565b6101bf6103143660046117a2565b6109e1565b60006001600160a01b03831661038a5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806103e157506001600160e01b031982166303a24d0760e21b145b806103fc57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6004805461040f9061203a565b80601f016020809104026020016040519081016040528092919081815260200182805461043b9061203a565b80156104885780601f1061045d57610100808354040283529160200191610488565b820191906000526020600020905b81548152906001019060200180831161046b57829003601f168201915b505050505081565b60008181526006602052604090208054606091906104ad9061203a565b80601f01602080910402602001604051908101604052809291908181526020018280546104d99061203a565b80156105265780601f106104fb57610100808354040283529160200191610526565b820191906000526020600020905b81548152906001019060200180831161050957829003601f168201915b50505050509050919050565b6003546001600160a01b0316331461055c5760405162461bcd60e51b815260040161038190611f41565b61057783838360405180602001604052806000815250610a7c565b505050565b6003546001600160a01b031633146105a65760405162461bcd60e51b815260040161038190611f41565b60005b83518110156105f8576105e68482815181106105c7576105c76120d2565b6020026020010151848460405180602001604052806000815250610a7c565b806105f0816120a1565b9150506105a9565b50505050565b6001600160a01b03851633148061061a575061061a85336102c5565b6106815760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610381565b61068e8585858585610b4c565b5050505050565b606081518351146106fa5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610381565b600083516001600160401b03811115610715576107156120e8565b60405190808252806020026020018201604052801561073e578160200160208202803683370190505b50905060005b84518110156107b657610789858281518110610762576107626120d2565b602002602001015185838151811061077c5761077c6120d2565b6020026020010151610319565b82828151811061079b5761079b6120d2565b60209081029190910101526107af816120a1565b9050610744565b509392505050565b6003546001600160a01b031633146107e85760405162461bcd60e51b815260040161038190611f41565b6107f3858585610ce8565b61068e85838360405180602001604052806000815250610e64565b6003546001600160a01b031633146108385760405162461bcd60e51b815260040161038190611f41565b6108426000610faf565b565b61084f338383610ce8565b5050565b6003546001600160a01b0316331461087d5760405162461bcd60e51b815260040161038190611f41565b6000828152600660209081526040909120825161089c92840190611581565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b826040516108cd9190611dd0565b60405180910390a25050565b6005805461040f9061203a565b61084f338383611001565b61084f3383836110e2565b6006602052600090815260409020805461040f9061203a565b6003546001600160a01b0316331461093f5760405162461bcd60e51b815260040161038190611f41565b61057783838360405180602001604052806000815250610e64565b6001600160a01b038516331480610976575061097685336102c5565b6109d45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610381565b61068e85858585856111e4565b6003546001600160a01b03163314610a0b5760405162461bcd60e51b815260040161038190611f41565b6001600160a01b038116610a705760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610381565b610a7981610faf565b50565b6001600160a01b038416610aa25760405162461bcd60e51b815260040161038190611fbe565b33610abc81600087610ab388611301565b61068e88611301565b6000848152602081815260408083206001600160a01b038916845290915281208054859290610aec908490612022565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461068e8160008787878761134c565b8151835114610b6d5760405162461bcd60e51b815260040161038190611f76565b6001600160a01b038416610b935760405162461bcd60e51b815260040161038190611e6f565b3360005b8451811015610c7a576000858281518110610bb457610bb46120d2565b602002602001015190506000858381518110610bd257610bd26120d2565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015610c225760405162461bcd60e51b815260040161038190611ef7565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610c5f908490612022565b9250508190555050505080610c73906120a1565b9050610b97565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610cca929190611da2565b60405180910390a4610ce08187878787876114b7565b505050505050565b6001600160a01b038316610d0e5760405162461bcd60e51b815260040161038190611eb4565b8051825114610d2f5760405162461bcd60e51b815260040161038190611f76565b604080516020810190915260009081905233905b8351811015610e05576000848281518110610d6057610d606120d2565b602002602001015190506000848381518110610d7e57610d7e6120d2565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015610dce5760405162461bcd60e51b815260040161038190611e2b565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580610dfd816120a1565b915050610d43565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610e56929190611da2565b60405180910390a450505050565b6001600160a01b038416610e8a5760405162461bcd60e51b815260040161038190611fbe565b8151835114610eab5760405162461bcd60e51b815260040161038190611f76565b3360005b8451811015610f4757838181518110610eca57610eca6120d2565b6020026020010151600080878481518110610ee757610ee76120d2565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610f2f9190612022565b90915550819050610f3f816120a1565b915050610eaf565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610f98929190611da2565b60405180910390a461068e816000878787876114b7565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156110755760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610381565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383166111085760405162461bcd60e51b815260040161038190611eb4565b336111388185600061111987611301565b61112287611301565b5050604080516020810190915260009052505050565b6000838152602081815260408083206001600160a01b0388168452909152902054828110156111795760405162461bcd60e51b815260040161038190611e2b565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b03841661120a5760405162461bcd60e51b815260040161038190611e6f565b3361121a818787610ab388611301565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561125b5760405162461bcd60e51b815260040161038190611ef7565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611298908490612022565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46112f882888888888861134c565b50505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061133b5761133b6120d2565b602090810291909101015292915050565b6001600160a01b0384163b15610ce05760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906113909089908990889088908890600401611d4a565b602060405180830381600087803b1580156113aa57600080fd5b505af19250505080156113da575060408051601f3d908101601f191682019092526113d791810190611bbc565b60015b611487576113e66120fe565b806308c379a0141561142057506113fb61211a565b806114065750611422565b8060405162461bcd60e51b81526004016103819190611dd0565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610381565b6001600160e01b0319811663f23a6e6160e01b146112f85760405162461bcd60e51b815260040161038190611de3565b6001600160a01b0384163b15610ce05760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906114fb9089908990889088908890600401611cec565b602060405180830381600087803b15801561151557600080fd5b505af1925050508015611545575060408051601f3d908101601f1916820190925261154291810190611bbc565b60015b611551576113e66120fe565b6001600160e01b0319811663bc197c8160e01b146112f85760405162461bcd60e51b815260040161038190611de3565b82805461158d9061203a565b90600052602060002090601f0160209004810192826115af57600085556115f5565b82601f106115c857805160ff19168380011785556115f5565b828001600101855582156115f5579182015b828111156115f55782518255916020019190600101906115da565b50611601929150611605565b5090565b5b808211156116015760008155600101611606565b60006001600160401b03831115611633576116336120e8565b60405161164a601f8501601f191660200182612075565b80915083815284848401111561165f57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461168e57600080fd5b919050565b600082601f8301126116a457600080fd5b813560206116b182611fff565b6040516116be8282612075565b8381528281019150858301600585901b870184018810156116de57600080fd5b60005b85811015611704576116f282611677565b845292840192908401906001016116e1565b5090979650505050505050565b600082601f83011261172257600080fd5b8135602061172f82611fff565b60405161173c8282612075565b8381528281019150858301600585901b8701840188101561175c57600080fd5b60005b858110156117045781358452928401929084019060010161175f565b600082601f83011261178c57600080fd5b61179b8383356020850161161a565b9392505050565b6000602082840312156117b457600080fd5b61179b82611677565b600080604083850312156117d057600080fd5b6117d983611677565b91506117e760208401611677565b90509250929050565b600080600080600060a0868803121561180857600080fd5b61181186611677565b945061181f60208701611677565b935060408601356001600160401b038082111561183b57600080fd5b61184789838a01611711565b9450606088013591508082111561185d57600080fd5b61186989838a01611711565b9350608088013591508082111561187f57600080fd5b5061188c8882890161177b565b9150509295509295909350565b600080600080600060a086880312156118b157600080fd5b6118ba86611677565b94506118c860208701611677565b9350604086013592506060860135915060808601356001600160401b038111156118f157600080fd5b61188c8882890161177b565b60008060006060848603121561191257600080fd5b61191b84611677565b925060208401356001600160401b038082111561193757600080fd5b61194387838801611711565b9350604086013591508082111561195957600080fd5b5061196686828701611711565b9150509250925092565b600080600080600060a0868803121561198857600080fd5b61199186611677565b945060208601356001600160401b03808211156119ad57600080fd5b6119b989838a01611711565b955060408801359150808211156119cf57600080fd5b6119db89838a01611711565b945060608801359150808211156119f157600080fd5b6119fd89838a01611711565b93506080880135915080821115611a1357600080fd5b5061188c88828901611711565b60008060408385031215611a3357600080fd5b611a3c83611677565b915060208301358015158114611a5157600080fd5b809150509250929050565b60008060408385031215611a6f57600080fd5b611a7883611677565b946020939093013593505050565b600080600060608486031215611a9b57600080fd5b611aa484611677565b95602085013595506040909401359392505050565b60008060408385031215611acc57600080fd5b82356001600160401b0380821115611ae357600080fd5b611aef86838701611693565b93506020850135915080821115611b0557600080fd5b50611b1285828601611711565b9150509250929050565b600080600060608486031215611b3157600080fd5b83356001600160401b03811115611b4757600080fd5b611b5386828701611693565b9660208601359650604090950135949350505050565b60008060408385031215611b7c57600080fd5b82356001600160401b0380821115611b9357600080fd5b611aef86838701611711565b600060208284031215611bb157600080fd5b813561179b816121a3565b600060208284031215611bce57600080fd5b815161179b816121a3565b600060208284031215611beb57600080fd5b5035919050565b60008060408385031215611c0557600080fd5b8235915060208301356001600160401b03811115611c2257600080fd5b8301601f81018513611c3357600080fd5b611b128582356020840161161a565b60008060408385031215611c5557600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015611c9457815187529582019590820190600101611c78565b509495945050505050565b6000815180845260005b81811015611cc557602081850181015186830182015201611ca9565b81811115611cd7576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611d1890830186611c64565b8281036060840152611d2a8186611c64565b90508281036080840152611d3e8185611c9f565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611d8490830184611c9f565b979650505050505050565b60208152600061179b6020830184611c64565b604081526000611db56040830185611c64565b8281036020840152611dc78185611c64565b95945050505050565b60208152600061179b6020830184611c9f565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60006001600160401b03821115612018576120186120e8565b5060051b60200190565b60008219821115612035576120356120bc565b500190565b600181811c9082168061204e57607f821691505b6020821081141561206f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b038111828210171561209a5761209a6120e8565b6040525050565b60006000198214156120b5576120b56120bc565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156121175760046000803e5060005160e01c5b90565b600060443d10156121285790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561215757505050505090565b828501915081518181111561216f5750505050505090565b843d87010160208285010111156121895750505050505090565b61219860208286010187612075565b509095945050505050565b6001600160e01b031981168114610a7957600080fdfea2646970667358221220b7bedad7ed1c9027e0ecccfff9db02693d24b53a1319bfabe15d4221eb05e6e864736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101365760003560e01c806383ca4b6f116100b8578063b390c0ab1161007c578063b390c0ab1461027e578063c87b56dd14610291578063d81d0a15146102a4578063e985e9c5146102b7578063f242432a146102f3578063f2fde38b1461030657600080fd5b806383ca4b6f14610222578063862440e2146102355780638da5cb5b1461024857806395d89b4114610263578063a22cb4651461026b57600080fd5b80632bee43cf116100ff5780632bee43cf146101c15780632eb2c2d6146101d45780634e1273f4146101e7578063510f410414610207578063715018a61461021a57600080fd5b8062fdd58e1461013b57806301ffc9a71461016157806306fdde03146101845780630e89341c14610199578063156e29f6146101ac575b600080fd5b61014e610149366004611a5c565b610319565b6040519081526020015b60405180910390f35b61017461016f366004611b9f565b6103b0565b6040519015158152602001610158565b61018c610402565b6040516101589190611dd0565b61018c6101a7366004611bd9565b610490565b6101bf6101ba366004611a86565b610532565b005b6101bf6101cf366004611b1c565b61057c565b6101bf6101e23660046117f0565b6105fe565b6101fa6101f5366004611ab9565b610695565b6040516101589190611d8f565b6101bf610215366004611970565b6107be565b6101bf61080e565b6101bf610230366004611b69565b610844565b6101bf610243366004611bf2565b610853565b6003546040516001600160a01b039091168152602001610158565b61018c6108d9565b6101bf610279366004611a20565b6108e6565b6101bf61028c366004611c42565b6108f1565b61018c61029f366004611bd9565b6108fc565b6101bf6102b23660046118fd565b610915565b6101746102c53660046117bd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101bf610301366004611899565b61095a565b6101bf6103143660046117a2565b6109e1565b60006001600160a01b03831661038a5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806103e157506001600160e01b031982166303a24d0760e21b145b806103fc57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6004805461040f9061203a565b80601f016020809104026020016040519081016040528092919081815260200182805461043b9061203a565b80156104885780601f1061045d57610100808354040283529160200191610488565b820191906000526020600020905b81548152906001019060200180831161046b57829003601f168201915b505050505081565b60008181526006602052604090208054606091906104ad9061203a565b80601f01602080910402602001604051908101604052809291908181526020018280546104d99061203a565b80156105265780601f106104fb57610100808354040283529160200191610526565b820191906000526020600020905b81548152906001019060200180831161050957829003601f168201915b50505050509050919050565b6003546001600160a01b0316331461055c5760405162461bcd60e51b815260040161038190611f41565b61057783838360405180602001604052806000815250610a7c565b505050565b6003546001600160a01b031633146105a65760405162461bcd60e51b815260040161038190611f41565b60005b83518110156105f8576105e68482815181106105c7576105c76120d2565b6020026020010151848460405180602001604052806000815250610a7c565b806105f0816120a1565b9150506105a9565b50505050565b6001600160a01b03851633148061061a575061061a85336102c5565b6106815760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610381565b61068e8585858585610b4c565b5050505050565b606081518351146106fa5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610381565b600083516001600160401b03811115610715576107156120e8565b60405190808252806020026020018201604052801561073e578160200160208202803683370190505b50905060005b84518110156107b657610789858281518110610762576107626120d2565b602002602001015185838151811061077c5761077c6120d2565b6020026020010151610319565b82828151811061079b5761079b6120d2565b60209081029190910101526107af816120a1565b9050610744565b509392505050565b6003546001600160a01b031633146107e85760405162461bcd60e51b815260040161038190611f41565b6107f3858585610ce8565b61068e85838360405180602001604052806000815250610e64565b6003546001600160a01b031633146108385760405162461bcd60e51b815260040161038190611f41565b6108426000610faf565b565b61084f338383610ce8565b5050565b6003546001600160a01b0316331461087d5760405162461bcd60e51b815260040161038190611f41565b6000828152600660209081526040909120825161089c92840190611581565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b826040516108cd9190611dd0565b60405180910390a25050565b6005805461040f9061203a565b61084f338383611001565b61084f3383836110e2565b6006602052600090815260409020805461040f9061203a565b6003546001600160a01b0316331461093f5760405162461bcd60e51b815260040161038190611f41565b61057783838360405180602001604052806000815250610e64565b6001600160a01b038516331480610976575061097685336102c5565b6109d45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610381565b61068e85858585856111e4565b6003546001600160a01b03163314610a0b5760405162461bcd60e51b815260040161038190611f41565b6001600160a01b038116610a705760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610381565b610a7981610faf565b50565b6001600160a01b038416610aa25760405162461bcd60e51b815260040161038190611fbe565b33610abc81600087610ab388611301565b61068e88611301565b6000848152602081815260408083206001600160a01b038916845290915281208054859290610aec908490612022565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461068e8160008787878761134c565b8151835114610b6d5760405162461bcd60e51b815260040161038190611f76565b6001600160a01b038416610b935760405162461bcd60e51b815260040161038190611e6f565b3360005b8451811015610c7a576000858281518110610bb457610bb46120d2565b602002602001015190506000858381518110610bd257610bd26120d2565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015610c225760405162461bcd60e51b815260040161038190611ef7565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610c5f908490612022565b9250508190555050505080610c73906120a1565b9050610b97565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610cca929190611da2565b60405180910390a4610ce08187878787876114b7565b505050505050565b6001600160a01b038316610d0e5760405162461bcd60e51b815260040161038190611eb4565b8051825114610d2f5760405162461bcd60e51b815260040161038190611f76565b604080516020810190915260009081905233905b8351811015610e05576000848281518110610d6057610d606120d2565b602002602001015190506000848381518110610d7e57610d7e6120d2565b602090810291909101810151600084815280835260408082206001600160a01b038c168352909352919091205490915081811015610dce5760405162461bcd60e51b815260040161038190611e2b565b6000928352602083815260408085206001600160a01b038b1686529091529092209103905580610dfd816120a1565b915050610d43565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610e56929190611da2565b60405180910390a450505050565b6001600160a01b038416610e8a5760405162461bcd60e51b815260040161038190611fbe565b8151835114610eab5760405162461bcd60e51b815260040161038190611f76565b3360005b8451811015610f4757838181518110610eca57610eca6120d2565b6020026020010151600080878481518110610ee757610ee76120d2565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610f2f9190612022565b90915550819050610f3f816120a1565b915050610eaf565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610f98929190611da2565b60405180910390a461068e816000878787876114b7565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156110755760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610381565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383166111085760405162461bcd60e51b815260040161038190611eb4565b336111388185600061111987611301565b61112287611301565b5050604080516020810190915260009052505050565b6000838152602081815260408083206001600160a01b0388168452909152902054828110156111795760405162461bcd60e51b815260040161038190611e2b565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b03841661120a5760405162461bcd60e51b815260040161038190611e6f565b3361121a818787610ab388611301565b6000848152602081815260408083206001600160a01b038a1684529091529020548381101561125b5760405162461bcd60e51b815260040161038190611ef7565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611298908490612022565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46112f882888888888861134c565b50505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061133b5761133b6120d2565b602090810291909101015292915050565b6001600160a01b0384163b15610ce05760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906113909089908990889088908890600401611d4a565b602060405180830381600087803b1580156113aa57600080fd5b505af19250505080156113da575060408051601f3d908101601f191682019092526113d791810190611bbc565b60015b611487576113e66120fe565b806308c379a0141561142057506113fb61211a565b806114065750611422565b8060405162461bcd60e51b81526004016103819190611dd0565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610381565b6001600160e01b0319811663f23a6e6160e01b146112f85760405162461bcd60e51b815260040161038190611de3565b6001600160a01b0384163b15610ce05760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906114fb9089908990889088908890600401611cec565b602060405180830381600087803b15801561151557600080fd5b505af1925050508015611545575060408051601f3d908101601f1916820190925261154291810190611bbc565b60015b611551576113e66120fe565b6001600160e01b0319811663bc197c8160e01b146112f85760405162461bcd60e51b815260040161038190611de3565b82805461158d9061203a565b90600052602060002090601f0160209004810192826115af57600085556115f5565b82601f106115c857805160ff19168380011785556115f5565b828001600101855582156115f5579182015b828111156115f55782518255916020019190600101906115da565b50611601929150611605565b5090565b5b808211156116015760008155600101611606565b60006001600160401b03831115611633576116336120e8565b60405161164a601f8501601f191660200182612075565b80915083815284848401111561165f57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461168e57600080fd5b919050565b600082601f8301126116a457600080fd5b813560206116b182611fff565b6040516116be8282612075565b8381528281019150858301600585901b870184018810156116de57600080fd5b60005b85811015611704576116f282611677565b845292840192908401906001016116e1565b5090979650505050505050565b600082601f83011261172257600080fd5b8135602061172f82611fff565b60405161173c8282612075565b8381528281019150858301600585901b8701840188101561175c57600080fd5b60005b858110156117045781358452928401929084019060010161175f565b600082601f83011261178c57600080fd5b61179b8383356020850161161a565b9392505050565b6000602082840312156117b457600080fd5b61179b82611677565b600080604083850312156117d057600080fd5b6117d983611677565b91506117e760208401611677565b90509250929050565b600080600080600060a0868803121561180857600080fd5b61181186611677565b945061181f60208701611677565b935060408601356001600160401b038082111561183b57600080fd5b61184789838a01611711565b9450606088013591508082111561185d57600080fd5b61186989838a01611711565b9350608088013591508082111561187f57600080fd5b5061188c8882890161177b565b9150509295509295909350565b600080600080600060a086880312156118b157600080fd5b6118ba86611677565b94506118c860208701611677565b9350604086013592506060860135915060808601356001600160401b038111156118f157600080fd5b61188c8882890161177b565b60008060006060848603121561191257600080fd5b61191b84611677565b925060208401356001600160401b038082111561193757600080fd5b61194387838801611711565b9350604086013591508082111561195957600080fd5b5061196686828701611711565b9150509250925092565b600080600080600060a0868803121561198857600080fd5b61199186611677565b945060208601356001600160401b03808211156119ad57600080fd5b6119b989838a01611711565b955060408801359150808211156119cf57600080fd5b6119db89838a01611711565b945060608801359150808211156119f157600080fd5b6119fd89838a01611711565b93506080880135915080821115611a1357600080fd5b5061188c88828901611711565b60008060408385031215611a3357600080fd5b611a3c83611677565b915060208301358015158114611a5157600080fd5b809150509250929050565b60008060408385031215611a6f57600080fd5b611a7883611677565b946020939093013593505050565b600080600060608486031215611a9b57600080fd5b611aa484611677565b95602085013595506040909401359392505050565b60008060408385031215611acc57600080fd5b82356001600160401b0380821115611ae357600080fd5b611aef86838701611693565b93506020850135915080821115611b0557600080fd5b50611b1285828601611711565b9150509250929050565b600080600060608486031215611b3157600080fd5b83356001600160401b03811115611b4757600080fd5b611b5386828701611693565b9660208601359650604090950135949350505050565b60008060408385031215611b7c57600080fd5b82356001600160401b0380821115611b9357600080fd5b611aef86838701611711565b600060208284031215611bb157600080fd5b813561179b816121a3565b600060208284031215611bce57600080fd5b815161179b816121a3565b600060208284031215611beb57600080fd5b5035919050565b60008060408385031215611c0557600080fd5b8235915060208301356001600160401b03811115611c2257600080fd5b8301601f81018513611c3357600080fd5b611b128582356020840161161a565b60008060408385031215611c5557600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015611c9457815187529582019590820190600101611c78565b509495945050505050565b6000815180845260005b81811015611cc557602081850181015186830182015201611ca9565b81811115611cd7576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0386811682528516602082015260a060408201819052600090611d1890830186611c64565b8281036060840152611d2a8186611c64565b90508281036080840152611d3e8185611c9f565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611d8490830184611c9f565b979650505050505050565b60208152600061179b6020830184611c64565b604081526000611db56040830185611c64565b8281036020840152611dc78185611c64565b95945050505050565b60208152600061179b6020830184611c9f565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60006001600160401b03821115612018576120186120e8565b5060051b60200190565b60008219821115612035576120356120bc565b500190565b600181811c9082168061204e57607f821691505b6020821081141561206f57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b038111828210171561209a5761209a6120e8565b6040525050565b60006000198214156120b5576120b56120bc565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156121175760046000803e5060005160e01c5b90565b600060443d10156121285790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561215757505050505090565b828501915081518181111561216f5750505050505090565b843d87010160208285010111156121895750505050505090565b61219860208286010187612075565b509095945050505050565b6001600160e01b031981168114610a7957600080fdfea2646970667358221220b7bedad7ed1c9027e0ecccfff9db02693d24b53a1319bfabe15d4221eb05e6e864736f6c63430008070033
Deployed Bytecode Sourcemap
36332:1435:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22802:231;;;;;;:::i;:::-;;:::i;:::-;;;20199:25:1;;;20187:2;20172:18;22802:231:0;;;;;;;;21825:310;;;;;;:::i;:::-;;:::i;:::-;;;13706:14:1;;13699:22;13681:41;;13669:2;13654:18;21825:310:0;13541:187:1;36382:18:0;;;:::i;:::-;;;;;;;:::i;37661:101::-;;;;;;:::i;:::-;;:::i;36768:111::-;;;;;;:::i;:::-;;:::i;:::-;;36578:184;;;;;;:::i;:::-;;:::i;24741:442::-;;;;;;:::i;:::-;;:::i;23199:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;37260:265::-;;;;;;:::i;:::-;;:::i;2529:103::-;;;:::i;37131:123::-;;;;;;:::i;:::-;;:::i;37531:124::-;;;;;;:::i;:::-;;:::i;1878:87::-;1951:6;;1878:87;;-1:-1:-1;;;;;1951:6:0;;;11347:51:1;;11335:2;11320:18;1878:87:0;11201:203:1;36405:20:0;;;:::i;23796:155::-;;;;;;:::i;:::-;;:::i;37034:91::-;;;;;;:::i;:::-;;:::i;36432:39::-;;;;;;:::i;:::-;;:::i;36885:143::-;;;;;;:::i;:::-;;:::i;24023:168::-;;;;;;:::i;:::-;-1:-1:-1;;;;;24146:27:0;;;24122:4;24146:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;24023:168;24263:401;;;;;;:::i;:::-;;:::i;2787:201::-;;;;;;:::i;:::-;;:::i;22802:231::-;22888:7;-1:-1:-1;;;;;22916:21:0;;22908:77;;;;-1:-1:-1;;;22908:77:0;;14989:2:1;22908:77:0;;;14971:21:1;15028:2;15008:18;;;15001:30;15067:34;15047:18;;;15040:62;-1:-1:-1;;;15118:18:1;;;15111:41;15169:19;;22908:77:0;;;;;;;;;-1:-1:-1;23003:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;23003:22:0;;;;;;;;;;;;22802:231::o;21825:310::-;21927:4;-1:-1:-1;;;;;;21964:41:0;;-1:-1:-1;;;21964:41:0;;:110;;-1:-1:-1;;;;;;;22022:52:0;;-1:-1:-1;;;22022:52:0;21964:110;:163;;;-1:-1:-1;;;;;;;;;;13358:40:0;;;22091:36;21944:183;21825:310;-1:-1:-1;;21825:310:0:o;36382:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37661:101::-;37743:13;;;;:8;:13;;;;;37736:20;;37714:13;;37743;37736:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37661:101;;;:::o;36768:111::-;1951:6;;-1:-1:-1;;;;;1951:6:0;684:10;2098:23;2090:68;;;;-1:-1:-1;;;2090:68:0;;;;;;;:::i;:::-;36845:28:::1;36851:3;36856;36861:7;36845:28;;;;;;;;;;;::::0;:5:::1;:28::i;:::-;36768:111:::0;;;:::o;36578:184::-;1951:6;;-1:-1:-1;;;;;1951:6:0;684:10;2098:23;2090:68;;;;-1:-1:-1;;;2090:68:0;;;;;;;:::i;:::-;36671:9:::1;36666:91;36690:3;:10;36686:1;:14;36666:91;;;36718:31;36724:3;36728:1;36724:6;;;;;;;;:::i;:::-;;;;;;;36732:3;36737:7;36718:31;;;;;;;;;;;::::0;:5:::1;:31::i;:::-;36702:3:::0;::::1;::::0;::::1;:::i;:::-;;;;36666:91;;;;36578:184:::0;;;:::o;24741:442::-;-1:-1:-1;;;;;24974:20:0;;684:10;24974:20;;:60;;-1:-1:-1;24998:36:0;25015:4;684:10;24023:168;:::i;24998:36::-;24952:160;;;;-1:-1:-1;;;24952:160:0;;17029:2:1;24952:160:0;;;17011:21:1;17068:2;17048:18;;;17041:30;17107:34;17087:18;;;17080:62;-1:-1:-1;;;17158:18:1;;;17151:48;17216:19;;24952:160:0;16827:414:1;24952:160:0;25123:52;25146:4;25152:2;25156:3;25161:7;25170:4;25123:22;:52::i;:::-;24741:442;;;;;:::o;23199:524::-;23355:16;23416:3;:10;23397:8;:15;:29;23389:83;;;;-1:-1:-1;;;23389:83:0;;19034:2:1;23389:83:0;;;19016:21:1;19073:2;19053:18;;;19046:30;19112:34;19092:18;;;19085:62;-1:-1:-1;;;19163:18:1;;;19156:39;19212:19;;23389:83:0;18832:405:1;23389:83:0;23485:30;23532:8;:15;-1:-1:-1;;;;;23518:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23518:30:0;;23485:63;;23566:9;23561:122;23585:8;:15;23581:1;:19;23561:122;;;23641:30;23651:8;23660:1;23651:11;;;;;;;;:::i;:::-;;;;;;;23664:3;23668:1;23664:6;;;;;;;;:::i;:::-;;;;;;;23641:9;:30::i;:::-;23622:13;23636:1;23622:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;23602:3;;;:::i;:::-;;;23561:122;;;-1:-1:-1;23702:13:0;23199:524;-1:-1:-1;;;23199:524:0:o;37260:265::-;1951:6;;-1:-1:-1;;;;;1951:6:0;684:10;2098:23;2090:68;;;;-1:-1:-1;;;2090:68:0;;;;;;;:::i;:::-;37426:41:::1;37437:5;37444:8;37454:12;37426:10;:41::i;:::-;37474:45;37485:5;37492:8;37502:12;37474:45;;;;;;;;;;;::::0;:10:::1;:45::i;2529:103::-:0;1951:6;;-1:-1:-1;;;;;1951:6:0;684:10;2098:23;2090:68;;;;-1:-1:-1;;;2090:68:0;;;;;;;:::i;:::-;2594:30:::1;2621:1;2594:18;:30::i;:::-;2529:103::o:0;37131:123::-;37210:38;37221:10;37233:4;37239:8;37210:10;:38::i;:::-;37131:123;;:::o;37531:124::-;1951:6;;-1:-1:-1;;;;;1951:6:0;684:10;2098:23;2090:68;;;;-1:-1:-1;;;2090:68:0;;;;;;;:::i;:::-;37603:13:::1;::::0;;;:8:::1;:13;::::0;;;;;;;:20;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;37645:3;37635:14;37639:4;37635:14;;;;;;:::i;:::-;;;;;;;;37531:124:::0;;:::o;36405:20::-;;;;;;;:::i;23796:155::-;23891:52;684:10;23924:8;23934;23891:18;:52::i;37034:91::-;37088:31;37094:10;37106:3;37111:7;37088:5;:31::i;36432:39::-;;;;;;;;;;;;;;;;:::i;36885:143::-;1951:6;;-1:-1:-1;;;;;1951:6:0;684:10;2098:23;2090:68;;;;-1:-1:-1;;;2090:68:0;;;;;;;:::i;:::-;36987:35:::1;36998:3;37003:4;37009:8;36987:35;;;;;;;;;;;::::0;:10:::1;:35::i;24263:401::-:0;-1:-1:-1;;;;;24471:20:0;;684:10;24471:20;;:60;;-1:-1:-1;24495:36:0;24512:4;684:10;24023:168;:::i;24495:36::-;24449:151;;;;-1:-1:-1;;;24449:151:0;;16213:2:1;24449:151:0;;;16195:21:1;16252:2;16232:18;;;16225:30;16291:34;16271:18;;;16264:62;-1:-1:-1;;;16342:18:1;;;16335:39;16391:19;;24449:151:0;16011:405:1;24449:151:0;24611:45;24629:4;24635:2;24639;24643:6;24651:4;24611:17;:45::i;2787:201::-;1951:6;;-1:-1:-1;;;;;1951:6:0;684:10;2098:23;2090:68;;;;-1:-1:-1;;;2090:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2876:22:0;::::1;2868:73;;;::::0;-1:-1:-1;;;2868:73:0;;15401:2:1;2868:73:0::1;::::0;::::1;15383:21:1::0;15440:2;15420:18;;;15413:30;15479:34;15459:18;;;15452:62;-1:-1:-1;;;15530:18:1;;;15523:36;15576:19;;2868:73:0::1;15199:402:1::0;2868:73:0::1;2952:28;2971:8;2952:18;:28::i;:::-;2787:201:::0;:::o;29217:569::-;-1:-1:-1;;;;;29370:16:0;;29362:62;;;;-1:-1:-1;;;29362:62:0;;;;;;;:::i;:::-;684:10;29481:102;684:10;29437:16;29524:2;29528:21;29546:2;29528:17;:21::i;:::-;29551:25;29569:6;29551:17;:25::i;29481:102::-;29596:9;:13;;;;;;;;;;;-1:-1:-1;;;;;29596:17:0;;;;;;;;;:27;;29617:6;;29596:9;:27;;29617:6;;29596:27;:::i;:::-;;;;-1:-1:-1;;29639:52:0;;;20409:25:1;;;20465:2;20450:18;;20443:34;;;-1:-1:-1;;;;;29639:52:0;;;;29672:1;;29639:52;;;;;;20382:18:1;29639:52:0;;;;;;;29704:74;29735:8;29753:1;29757:2;29761;29765:6;29773:4;29704:30;:74::i;26825:1074::-;27052:7;:14;27038:3;:10;:28;27030:81;;;;-1:-1:-1;;;27030:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27130:16:0;;27122:66;;;;-1:-1:-1;;;27122:66:0;;;;;;;:::i;:::-;684:10;27201:16;27318:421;27342:3;:10;27338:1;:14;27318:421;;;27374:10;27387:3;27391:1;27387:6;;;;;;;;:::i;:::-;;;;;;;27374:19;;27408:14;27425:7;27433:1;27425:10;;;;;;;;:::i;:::-;;;;;;;;;;;;27452:19;27474:13;;;;;;;;;;-1:-1:-1;;;;;27474:19:0;;;;;;;;;;;;27425:10;;-1:-1:-1;27516:21:0;;;;27508:76;;;;-1:-1:-1;;;27508:76:0;;;;;;;:::i;:::-;27628:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27628:19:0;;;;;;;;;;27650:20;;;27628:42;;27700:17;;;;;;;:27;;27650:20;;27628:9;27700:27;;27650:20;;27700:27;:::i;:::-;;;;;;;;27359:380;;;27354:3;;;;:::i;:::-;;;27318:421;;;;27786:2;-1:-1:-1;;;;;27756:47:0;27780:4;-1:-1:-1;;;;;27756:47:0;27770:8;-1:-1:-1;;;;;27756:47:0;;27790:3;27795:7;27756:47;;;;;;;:::i;:::-;;;;;;;;27816:75;27852:8;27862:4;27868:2;27872:3;27877:7;27886:4;27816:35;:75::i;:::-;27019:880;26825:1074;;;;;:::o;31978:891::-;-1:-1:-1;;;;;32130:18:0;;32122:66;;;;-1:-1:-1;;;32122:66:0;;;;;;;:::i;:::-;32221:7;:14;32207:3;:10;:28;32199:81;;;;-1:-1:-1;;;32199:81:0;;;;;;;:::i;:::-;32337:66;;;;;;;;;32293:16;32337:66;;;;684:10;;32416:373;32440:3;:10;32436:1;:14;32416:373;;;32472:10;32485:3;32489:1;32485:6;;;;;;;;:::i;:::-;;;;;;;32472:19;;32506:14;32523:7;32531:1;32523:10;;;;;;;;:::i;:::-;;;;;;;;;;;;32550:19;32572:13;;;;;;;;;;-1:-1:-1;;;;;32572:19:0;;;;;;;;;;;;32523:10;;-1:-1:-1;32614:21:0;;;;32606:70;;;;-1:-1:-1;;;32606:70:0;;;;;;;:::i;:::-;32720:9;:13;;;;;;;;;;;-1:-1:-1;;;;;32720:19:0;;;;;;;;;;32742:20;;32720:42;;32452:3;;;;:::i;:::-;;;;32416:373;;;;32844:1;-1:-1:-1;;;;;32806:55:0;32830:4;-1:-1:-1;;;;;32806:55:0;32820:8;-1:-1:-1;;;;;32806:55:0;;32848:3;32853:7;32806:55;;;;;;;:::i;:::-;;;;;;;;32111:758;31978:891;;;:::o;30142:735::-;-1:-1:-1;;;;;30320:16:0;;30312:62;;;;-1:-1:-1;;;30312:62:0;;;;;;;:::i;:::-;30407:7;:14;30393:3;:10;:28;30385:81;;;;-1:-1:-1;;;30385:81:0;;;;;;;:::i;:::-;684:10;30479:16;30602:103;30626:3;:10;30622:1;:14;30602:103;;;30683:7;30691:1;30683:10;;;;;;;;:::i;:::-;;;;;;;30658:9;:17;30668:3;30672:1;30668:6;;;;;;;;:::i;:::-;;;;;;;30658:17;;;;;;;;;;;:21;30676:2;-1:-1:-1;;;;;30658:21:0;-1:-1:-1;;;;;30658:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;30638:3:0;;-1:-1:-1;30638:3:0;;;:::i;:::-;;;;30602:103;;;;30758:2;-1:-1:-1;;;;;30722:53:0;30754:1;-1:-1:-1;;;;;30722:53:0;30736:8;-1:-1:-1;;;;;30722:53:0;;30762:3;30767:7;30722:53;;;;;;;:::i;:::-;;;;;;;;30788:81;30824:8;30842:1;30846:2;30850:3;30855:7;30864:4;30788:35;:81::i;3148:191::-;3241:6;;;-1:-1:-1;;;;;3258:17:0;;;-1:-1:-1;;;;;;3258:17:0;;;;;;;3291:40;;3241:6;;;3258:17;3241:6;;3291:40;;3222:16;;3291:40;3211:128;3148:191;:::o;33011:331::-;33166:8;-1:-1:-1;;;;;33157:17:0;:5;-1:-1:-1;;;;;33157:17:0;;;33149:71;;;;-1:-1:-1;;;33149:71:0;;18624:2:1;33149:71:0;;;18606:21:1;18663:2;18643:18;;;18636:30;18702:34;18682:18;;;18675:62;-1:-1:-1;;;18753:18:1;;;18746:39;18802:19;;33149:71:0;18422:405:1;33149:71:0;-1:-1:-1;;;;;33231:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;33231:46:0;;;;;;;;;;33293:41;;13681::1;;;33293::0;;13654:18:1;33293:41:0;;;;;;;33011:331;;;:::o;31127:648::-;-1:-1:-1;;;;;31254:18:0;;31246:66;;;;-1:-1:-1;;;31246:66:0;;;;;;;:::i;:::-;684:10;31369:102;684:10;31400:4;31325:16;31418:21;31436:2;31418:17;:21::i;:::-;31441:25;31459:6;31441:17;:25::i;:::-;-1:-1:-1;;31369:102:0;;;;;;;;;-1:-1:-1;31369:102:0;;-1:-1:-1;;;26825:1074:0;31369:102;31484:19;31506:13;;;;;;;;;;;-1:-1:-1;;;;;31506:19:0;;;;;;;;;;31544:21;;;;31536:70;;;;-1:-1:-1;;;31536:70:0;;;;;;;:::i;:::-;31642:9;:13;;;;;;;;;;;-1:-1:-1;;;;;31642:19:0;;;;;;;;;;;;31664:20;;;31642:42;;31713:54;;20409:25:1;;;20450:18;;;20443:34;;;31642:19:0;;31713:54;;;;;;20382:18:1;31713:54:0;;;;;;;31235:540;;31127:648;;;:::o;25647:820::-;-1:-1:-1;;;;;25835:16:0;;25827:66;;;;-1:-1:-1;;;25827:66:0;;;;;;;:::i;:::-;684:10;25950:96;684:10;25981:4;25987:2;25991:21;26009:2;25991:17;:21::i;25950:96::-;26059:19;26081:13;;;;;;;;;;;-1:-1:-1;;;;;26081:19:0;;;;;;;;;;26119:21;;;;26111:76;;;;-1:-1:-1;;;26111:76:0;;;;;;;:::i;:::-;26223:9;:13;;;;;;;;;;;-1:-1:-1;;;;;26223:19:0;;;;;;;;;;26245:20;;;26223:42;;26287:17;;;;;;;:27;;26245:20;;26223:9;26287:27;;26245:20;;26287:27;:::i;:::-;;;;-1:-1:-1;;26332:46:0;;;20409:25:1;;;20465:2;20450:18;;20443:34;;;-1:-1:-1;;;;;26332:46:0;;;;;;;;;;;;;;20382:18:1;26332:46:0;;;;;;;26391:68;26422:8;26432:4;26438:2;26442;26446:6;26454:4;26391:30;:68::i;:::-;25816:651;;25647:820;;;;;:::o;36100:198::-;36220:16;;;36234:1;36220:16;;;;;;;;;36166;;36195:22;;36220:16;;;;;;;;;;;;-1:-1:-1;36220:16:0;36195:41;;36258:7;36247:5;36253:1;36247:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;36285:5;36100:198;-1:-1:-1;;36100:198:0:o;34527:744::-;-1:-1:-1;;;;;34742:13:0;;4488:20;4536:8;34738:526;;34778:72;;-1:-1:-1;;;34778:72:0;;-1:-1:-1;;;;;34778:38:0;;;;;:72;;34817:8;;34827:4;;34833:2;;34837:6;;34845:4;;34778:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34778:72:0;;;;;;;;-1:-1:-1;;34778:72:0;;;;;;;;;;;;:::i;:::-;;;34774:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35126:6;35119:14;;-1:-1:-1;;;35119:14:0;;;;;;;;:::i;34774:479::-;;;35175:62;;-1:-1:-1;;;35175:62:0;;14159:2:1;35175:62:0;;;14141:21:1;14198:2;14178:18;;;14171:30;14237:34;14217:18;;;14210:62;-1:-1:-1;;;14288:18:1;;;14281:50;14348:19;;35175:62:0;13957:416:1;34774:479:0;-1:-1:-1;;;;;;34900:55:0;;-1:-1:-1;;;34900:55:0;34896:154;;34980:50;;-1:-1:-1;;;34980:50:0;;;;;;;:::i;35279:813::-;-1:-1:-1;;;;;35519:13:0;;4488:20;4536:8;35515:570;;35555:79;;-1:-1:-1;;;35555:79:0;;-1:-1:-1;;;;;35555:43:0;;;;;:79;;35599:8;;35609:4;;35615:3;;35620:7;;35629:4;;35555:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35555:79:0;;;;;;;;-1:-1:-1;;35555:79:0;;;;;;;;;;;;:::i;:::-;;;35551:523;;;;:::i;:::-;-1:-1:-1;;;;;;35716:60:0;;-1:-1:-1;;;35716:60:0;35712:159;;35801:50;;-1:-1:-1;;;35801:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;-1:-1:-1;;;;;104:6:1;101:30;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:1;;594:42;;584:70;;650:1;647;640:12;584:70;487:173;;;:::o;665:741::-;719:5;772:3;765:4;757:6;753:17;749:27;739:55;;790:1;787;780:12;739:55;826:6;813:20;852:4;875:43;915:2;875:43;:::i;:::-;947:2;941:9;959:31;987:2;979:6;959:31;:::i;:::-;1025:18;;;1059:15;;;;-1:-1:-1;1094:15:1;;;1144:1;1140:10;;;1128:23;;1124:32;;1121:41;-1:-1:-1;1118:61:1;;;1175:1;1172;1165:12;1118:61;1197:1;1207:169;1221:2;1218:1;1215:9;1207:169;;;1278:23;1297:3;1278:23;:::i;:::-;1266:36;;1322:12;;;;1354;;;;1239:1;1232:9;1207:169;;;-1:-1:-1;1394:6:1;;665:741;-1:-1:-1;;;;;;;665:741:1:o;1411:735::-;1465:5;1518:3;1511:4;1503:6;1499:17;1495:27;1485:55;;1536:1;1533;1526:12;1485:55;1572:6;1559:20;1598:4;1621:43;1661:2;1621:43;:::i;:::-;1693:2;1687:9;1705:31;1733:2;1725:6;1705:31;:::i;:::-;1771:18;;;1805:15;;;;-1:-1:-1;1840:15:1;;;1890:1;1886:10;;;1874:23;;1870:32;;1867:41;-1:-1:-1;1864:61:1;;;1921:1;1918;1911:12;1864:61;1943:1;1953:163;1967:2;1964:1;1961:9;1953:163;;;2024:17;;2012:30;;2062:12;;;;2094;;;;1985:1;1978:9;1953:163;;2151:220;2193:5;2246:3;2239:4;2231:6;2227:17;2223:27;2213:55;;2264:1;2261;2254:12;2213:55;2286:79;2361:3;2352:6;2339:20;2332:4;2324:6;2320:17;2286:79;:::i;:::-;2277:88;2151:220;-1:-1:-1;;;2151:220:1:o;2376:186::-;2435:6;2488:2;2476:9;2467:7;2463:23;2459:32;2456:52;;;2504:1;2501;2494:12;2456:52;2527:29;2546:9;2527:29;:::i;2567:260::-;2635:6;2643;2696:2;2684:9;2675:7;2671:23;2667:32;2664:52;;;2712:1;2709;2702:12;2664:52;2735:29;2754:9;2735:29;:::i;:::-;2725:39;;2783:38;2817:2;2806:9;2802:18;2783:38;:::i;:::-;2773:48;;2567:260;;;;;:::o;2832:943::-;2986:6;2994;3002;3010;3018;3071:3;3059:9;3050:7;3046:23;3042:33;3039:53;;;3088:1;3085;3078:12;3039:53;3111:29;3130:9;3111:29;:::i;:::-;3101:39;;3159:38;3193:2;3182:9;3178:18;3159:38;:::i;:::-;3149:48;;3248:2;3237:9;3233:18;3220:32;-1:-1:-1;;;;;3312:2:1;3304:6;3301:14;3298:34;;;3328:1;3325;3318:12;3298:34;3351:61;3404:7;3395:6;3384:9;3380:22;3351:61;:::i;:::-;3341:71;;3465:2;3454:9;3450:18;3437:32;3421:48;;3494:2;3484:8;3481:16;3478:36;;;3510:1;3507;3500:12;3478:36;3533:63;3588:7;3577:8;3566:9;3562:24;3533:63;:::i;:::-;3523:73;;3649:3;3638:9;3634:19;3621:33;3605:49;;3679:2;3669:8;3666:16;3663:36;;;3695:1;3692;3685:12;3663:36;;3718:51;3761:7;3750:8;3739:9;3735:24;3718:51;:::i;:::-;3708:61;;;2832:943;;;;;;;;:::o;3780:606::-;3884:6;3892;3900;3908;3916;3969:3;3957:9;3948:7;3944:23;3940:33;3937:53;;;3986:1;3983;3976:12;3937:53;4009:29;4028:9;4009:29;:::i;:::-;3999:39;;4057:38;4091:2;4080:9;4076:18;4057:38;:::i;:::-;4047:48;;4142:2;4131:9;4127:18;4114:32;4104:42;;4193:2;4182:9;4178:18;4165:32;4155:42;;4248:3;4237:9;4233:19;4220:33;-1:-1:-1;;;;;4268:6:1;4265:30;4262:50;;;4308:1;4305;4298:12;4262:50;4331:49;4372:7;4363:6;4352:9;4348:22;4331:49;:::i;4391:669::-;4518:6;4526;4534;4587:2;4575:9;4566:7;4562:23;4558:32;4555:52;;;4603:1;4600;4593:12;4555:52;4626:29;4645:9;4626:29;:::i;:::-;4616:39;;4706:2;4695:9;4691:18;4678:32;-1:-1:-1;;;;;4770:2:1;4762:6;4759:14;4756:34;;;4786:1;4783;4776:12;4756:34;4809:61;4862:7;4853:6;4842:9;4838:22;4809:61;:::i;:::-;4799:71;;4923:2;4912:9;4908:18;4895:32;4879:48;;4952:2;4942:8;4939:16;4936:36;;;4968:1;4965;4958:12;4936:36;;4991:63;5046:7;5035:8;5024:9;5020:24;4991:63;:::i;:::-;4981:73;;;4391:669;;;;;:::o;5065:1123::-;5260:6;5268;5276;5284;5292;5345:3;5333:9;5324:7;5320:23;5316:33;5313:53;;;5362:1;5359;5352:12;5313:53;5385:29;5404:9;5385:29;:::i;:::-;5375:39;;5465:2;5454:9;5450:18;5437:32;-1:-1:-1;;;;;5529:2:1;5521:6;5518:14;5515:34;;;5545:1;5542;5535:12;5515:34;5568:61;5621:7;5612:6;5601:9;5597:22;5568:61;:::i;:::-;5558:71;;5682:2;5671:9;5667:18;5654:32;5638:48;;5711:2;5701:8;5698:16;5695:36;;;5727:1;5724;5717:12;5695:36;5750:63;5805:7;5794:8;5783:9;5779:24;5750:63;:::i;:::-;5740:73;;5866:2;5855:9;5851:18;5838:32;5822:48;;5895:2;5885:8;5882:16;5879:36;;;5911:1;5908;5901:12;5879:36;5934:63;5989:7;5978:8;5967:9;5963:24;5934:63;:::i;:::-;5924:73;;6050:3;6039:9;6035:19;6022:33;6006:49;;6080:2;6070:8;6067:16;6064:36;;;6096:1;6093;6086:12;6064:36;;6119:63;6174:7;6163:8;6152:9;6148:24;6119:63;:::i;6193:347::-;6258:6;6266;6319:2;6307:9;6298:7;6294:23;6290:32;6287:52;;;6335:1;6332;6325:12;6287:52;6358:29;6377:9;6358:29;:::i;:::-;6348:39;;6437:2;6426:9;6422:18;6409:32;6484:5;6477:13;6470:21;6463:5;6460:32;6450:60;;6506:1;6503;6496:12;6450:60;6529:5;6519:15;;;6193:347;;;;;:::o;6545:254::-;6613:6;6621;6674:2;6662:9;6653:7;6649:23;6645:32;6642:52;;;6690:1;6687;6680:12;6642:52;6713:29;6732:9;6713:29;:::i;:::-;6703:39;6789:2;6774:18;;;;6761:32;;-1:-1:-1;;;6545:254:1:o;6804:322::-;6881:6;6889;6897;6950:2;6938:9;6929:7;6925:23;6921:32;6918:52;;;6966:1;6963;6956:12;6918:52;6989:29;7008:9;6989:29;:::i;:::-;6979:39;7065:2;7050:18;;7037:32;;-1:-1:-1;7116:2:1;7101:18;;;7088:32;;6804:322;-1:-1:-1;;;6804:322:1:o;7131:595::-;7249:6;7257;7310:2;7298:9;7289:7;7285:23;7281:32;7278:52;;;7326:1;7323;7316:12;7278:52;7366:9;7353:23;-1:-1:-1;;;;;7436:2:1;7428:6;7425:14;7422:34;;;7452:1;7449;7442:12;7422:34;7475:61;7528:7;7519:6;7508:9;7504:22;7475:61;:::i;:::-;7465:71;;7589:2;7578:9;7574:18;7561:32;7545:48;;7618:2;7608:8;7605:16;7602:36;;;7634:1;7631;7624:12;7602:36;;7657:63;7712:7;7701:8;7690:9;7686:24;7657:63;:::i;:::-;7647:73;;;7131:595;;;;;:::o;7731:484::-;7833:6;7841;7849;7902:2;7890:9;7881:7;7877:23;7873:32;7870:52;;;7918:1;7915;7908:12;7870:52;7958:9;7945:23;-1:-1:-1;;;;;7983:6:1;7980:30;7977:50;;;8023:1;8020;8013:12;7977:50;8046:61;8099:7;8090:6;8079:9;8075:22;8046:61;:::i;:::-;8036:71;8154:2;8139:18;;8126:32;;-1:-1:-1;8205:2:1;8190:18;;;8177:32;;7731:484;-1:-1:-1;;;;7731:484:1:o;8220:595::-;8338:6;8346;8399:2;8387:9;8378:7;8374:23;8370:32;8367:52;;;8415:1;8412;8405:12;8367:52;8455:9;8442:23;-1:-1:-1;;;;;8525:2:1;8517:6;8514:14;8511:34;;;8541:1;8538;8531:12;8511:34;8564:61;8617:7;8608:6;8597:9;8593:22;8564:61;:::i;8820:245::-;8878:6;8931:2;8919:9;8910:7;8906:23;8902:32;8899:52;;;8947:1;8944;8937:12;8899:52;8986:9;8973:23;9005:30;9029:5;9005:30;:::i;9070:249::-;9139:6;9192:2;9180:9;9171:7;9167:23;9163:32;9160:52;;;9208:1;9205;9198:12;9160:52;9240:9;9234:16;9259:30;9283:5;9259:30;:::i;9324:180::-;9383:6;9436:2;9424:9;9415:7;9411:23;9407:32;9404:52;;;9452:1;9449;9442:12;9404:52;-1:-1:-1;9475:23:1;;9324:180;-1:-1:-1;9324:180:1:o;9509:518::-;9587:6;9595;9648:2;9636:9;9627:7;9623:23;9619:32;9616:52;;;9664:1;9661;9654:12;9616:52;9700:9;9687:23;9677:33;;9761:2;9750:9;9746:18;9733:32;-1:-1:-1;;;;;9780:6:1;9777:30;9774:50;;;9820:1;9817;9810:12;9774:50;9843:22;;9896:4;9888:13;;9884:27;-1:-1:-1;9874:55:1;;9925:1;9922;9915:12;9874:55;9948:73;10013:7;10008:2;9995:16;9990:2;9986;9982:11;9948:73;:::i;10032:248::-;10100:6;10108;10161:2;10149:9;10140:7;10136:23;10132:32;10129:52;;;10177:1;10174;10167:12;10129:52;-1:-1:-1;;10200:23:1;;;10270:2;10255:18;;;10242:32;;-1:-1:-1;10032:248:1:o;10285:435::-;10338:3;10376:5;10370:12;10403:6;10398:3;10391:19;10429:4;10458:2;10453:3;10449:12;10442:19;;10495:2;10488:5;10484:14;10516:1;10526:169;10540:6;10537:1;10534:13;10526:169;;;10601:13;;10589:26;;10635:12;;;;10670:15;;;;10562:1;10555:9;10526:169;;;-1:-1:-1;10711:3:1;;10285:435;-1:-1:-1;;;;;10285:435:1:o;10725:471::-;10766:3;10804:5;10798:12;10831:6;10826:3;10819:19;10856:1;10866:162;10880:6;10877:1;10874:13;10866:162;;;10942:4;10998:13;;;10994:22;;10988:29;10970:11;;;10966:20;;10959:59;10895:12;10866:162;;;11046:6;11043:1;11040:13;11037:87;;;11112:1;11105:4;11096:6;11091:3;11087:16;11083:27;11076:38;11037:87;-1:-1:-1;11178:2:1;11157:15;-1:-1:-1;;11153:29:1;11144:39;;;;11185:4;11140:50;;10725:471;-1:-1:-1;;10725:471:1:o;11409:826::-;-1:-1:-1;;;;;11806:15:1;;;11788:34;;11858:15;;11853:2;11838:18;;11831:43;11768:3;11905:2;11890:18;;11883:31;;;11731:4;;11937:57;;11974:19;;11966:6;11937:57;:::i;:::-;12042:9;12034:6;12030:22;12025:2;12014:9;12010:18;12003:50;12076:44;12113:6;12105;12076:44;:::i;:::-;12062:58;;12169:9;12161:6;12157:22;12151:3;12140:9;12136:19;12129:51;12197:32;12222:6;12214;12197:32;:::i;:::-;12189:40;11409:826;-1:-1:-1;;;;;;;;11409:826:1:o;12240:560::-;-1:-1:-1;;;;;12537:15:1;;;12519:34;;12589:15;;12584:2;12569:18;;12562:43;12636:2;12621:18;;12614:34;;;12679:2;12664:18;;12657:34;;;12499:3;12722;12707:19;;12700:32;;;12462:4;;12749:45;;12774:19;;12766:6;12749:45;:::i;:::-;12741:53;12240:560;-1:-1:-1;;;;;;;12240:560:1:o;12805:261::-;12984:2;12973:9;12966:21;12947:4;13004:56;13056:2;13045:9;13041:18;13033:6;13004:56;:::i;13071:465::-;13328:2;13317:9;13310:21;13291:4;13354:56;13406:2;13395:9;13391:18;13383:6;13354:56;:::i;:::-;13458:9;13450:6;13446:22;13441:2;13430:9;13426:18;13419:50;13486:44;13523:6;13515;13486:44;:::i;:::-;13478:52;13071:465;-1:-1:-1;;;;;13071:465:1:o;13733:219::-;13882:2;13871:9;13864:21;13845:4;13902:44;13942:2;13931:9;13927:18;13919:6;13902:44;:::i;14378:404::-;14580:2;14562:21;;;14619:2;14599:18;;;14592:30;14658:34;14653:2;14638:18;;14631:62;-1:-1:-1;;;14724:2:1;14709:18;;14702:38;14772:3;14757:19;;14378:404::o;15606:400::-;15808:2;15790:21;;;15847:2;15827:18;;;15820:30;15886:34;15881:2;15866:18;;15859:62;-1:-1:-1;;;15952:2:1;15937:18;;15930:34;15996:3;15981:19;;15606:400::o;16421:401::-;16623:2;16605:21;;;16662:2;16642:18;;;16635:30;16701:34;16696:2;16681:18;;16674:62;-1:-1:-1;;;16767:2:1;16752:18;;16745:35;16812:3;16797:19;;16421:401::o;17246:399::-;17448:2;17430:21;;;17487:2;17467:18;;;17460:30;17526:34;17521:2;17506:18;;17499:62;-1:-1:-1;;;17592:2:1;17577:18;;17570:33;17635:3;17620:19;;17246:399::o;17650:406::-;17852:2;17834:21;;;17891:2;17871:18;;;17864:30;17930:34;17925:2;17910:18;;17903:62;-1:-1:-1;;;17996:2:1;17981:18;;17974:40;18046:3;18031:19;;17650:406::o;18061:356::-;18263:2;18245:21;;;18282:18;;;18275:30;18341:34;18336:2;18321:18;;18314:62;18408:2;18393:18;;18061:356::o;19242:404::-;19444:2;19426:21;;;19483:2;19463:18;;;19456:30;19522:34;19517:2;19502:18;;19495:62;-1:-1:-1;;;19588:2:1;19573:18;;19566:38;19636:3;19621:19;;19242:404::o;19651:397::-;19853:2;19835:21;;;19892:2;19872:18;;;19865:30;19931:34;19926:2;19911:18;;19904:62;-1:-1:-1;;;19997:2:1;19982:18;;19975:31;20038:3;20023:19;;19651:397::o;20488:183::-;20548:4;-1:-1:-1;;;;;20573:6:1;20570:30;20567:56;;;20603:18;;:::i;:::-;-1:-1:-1;20648:1:1;20644:14;20660:4;20640:25;;20488:183::o;20676:128::-;20716:3;20747:1;20743:6;20740:1;20737:13;20734:39;;;20753:18;;:::i;:::-;-1:-1:-1;20789:9:1;;20676:128::o;20809:380::-;20888:1;20884:12;;;;20931;;;20952:61;;21006:4;20998:6;20994:17;20984:27;;20952:61;21059:2;21051:6;21048:14;21028:18;21025:38;21022:161;;;21105:10;21100:3;21096:20;21093:1;21086:31;21140:4;21137:1;21130:15;21168:4;21165:1;21158:15;21022:161;;20809:380;;;:::o;21194:249::-;21304:2;21285:13;;-1:-1:-1;;21281:27:1;21269:40;;-1:-1:-1;;;;;21324:34:1;;21360:22;;;21321:62;21318:88;;;21386:18;;:::i;:::-;21422:2;21415:22;-1:-1:-1;;21194:249:1:o;21448:135::-;21487:3;-1:-1:-1;;21508:17:1;;21505:43;;;21528:18;;:::i;:::-;-1:-1:-1;21575:1:1;21564:13;;21448:135::o;21588:127::-;21649:10;21644:3;21640:20;21637:1;21630:31;21680:4;21677:1;21670:15;21704:4;21701:1;21694:15;21720:127;21781:10;21776:3;21772:20;21769:1;21762:31;21812:4;21809:1;21802:15;21836:4;21833:1;21826:15;21852:127;21913:10;21908:3;21904:20;21901:1;21894:31;21944:4;21941:1;21934:15;21968:4;21965:1;21958:15;21984:179;22019:3;22061:1;22043:16;22040:23;22037:120;;;22107:1;22104;22101;22086:23;-1:-1:-1;22144:1:1;22138:8;22133:3;22129:18;22037:120;21984:179;:::o;22168:671::-;22207:3;22249:4;22231:16;22228:26;22225:39;;;22168:671;:::o;22225:39::-;22291:2;22285:9;-1:-1:-1;;22356:16:1;22352:25;;22349:1;22285:9;22328:50;22407:4;22401:11;22431:16;-1:-1:-1;;;;;22537:2:1;22530:4;22522:6;22518:17;22515:25;22510:2;22502:6;22499:14;22496:45;22493:58;;;22544:5;;;;;22168:671;:::o;22493:58::-;22581:6;22575:4;22571:17;22560:28;;22617:3;22611:10;22644:2;22636:6;22633:14;22630:27;;;22650:5;;;;;;22168:671;:::o;22630:27::-;22734:2;22715:16;22709:4;22705:27;22701:36;22694:4;22685:6;22680:3;22676:16;22672:27;22669:69;22666:82;;;22741:5;;;;;;22168:671;:::o;22666:82::-;22757:57;22808:4;22799:6;22791;22787:19;22783:30;22777:4;22757:57;:::i;:::-;-1:-1:-1;22830:3:1;;22168:671;-1:-1:-1;;;;;22168:671:1:o;22844:131::-;-1:-1:-1;;;;;;22918:32:1;;22908:43;;22898:71;;22965:1;22962;22955:12
Swarm Source
ipfs://b7bedad7ed1c9027e0ecccfff9db02693d24b53a1319bfabe15d4221eb05e6e8
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.