ETH Price: $2,486.64 (-1.07%)
Gas: 0.64 Gwei

Token

 

Overview

Max Total Supply

420

Holders

242

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x208d6b7cb68ee076f2e1df60da9d5509f53d1e5f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Kegs

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-01
*/

// Sources flattened with hardhat v2.8.3 https://hardhat.org

// File contracts/utils/Functional.sol

abstract contract Functional {
    function toString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    bool private _reentryKey = false;
    modifier reentryLock() {
        require(!_reentryKey, "attempt to reenter a locked function");
        _reentryKey = true;
        _;
        _reentryKey = false;
    }
}


// File contracts/interfaces/IERC165.sol

/**
 * @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 contracts/interfaces/IERC1155.sol

/**
 * @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 contracts/interfaces/IERC1155Receiver.sol

/**
 * @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 contracts/interfaces/IERC1155MetadataURI.sol

/**
 * @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 contracts/utils/Address.sol

/**
 * @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 contracts/utils/Context.sol

/**
 * @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 contracts/ERC165.sol

/**
 * @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 contracts/ERC1155.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (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;
    }
}


// File contracts/utils/Ownable.sol

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// File contracts/Kegs.sol

contract SlattContract {
	function mint(address account, uint256 amount) external {}
}

contract Kegs is ERC1155, Ownable, Functional {

    string private baseURI;
    SlattContract slatt;
    address public SLATT_CONTRACT;
    bool public supplyFrozen;

    constructor(string memory _baseURI) public ERC1155(_baseURI) {
        baseURI = _baseURI;
        supplyFrozen = false;
    }

    function setSlattContract(address _slatt) external onlyOwner {
        slatt = SlattContract(_slatt);
        SLATT_CONTRACT = _slatt;
    }

    function mint(uint id, uint amount) external onlyOwner {
        require(!supplyFrozen, "Supply is frozen");
        _mint(msg.sender, id, amount, "");
    }

    function airdrop(address[] memory recipients, uint id, uint amount) external onlyOwner {
        require(!supplyFrozen, "Supply is frozen");
        for(uint i = 0; i < recipients.length; i++) {
            _mint(recipients[i], id, amount, "");
        }
    }

    function burn(uint id, uint amount) external {
        _burn(msg.sender, id, amount);
        slatt.mint(msg.sender, 420);
    }

    function setTokenURI(string memory newURI) external onlyOwner {
        baseURI = newURI;
    }

    function freezeSupply() external onlyOwner {
        supplyFrozen = true;
    }

    function uri(uint256 id) public view override returns (string memory)
    {
        return string(abi.encodePacked(baseURI, toString(id)));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"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":[],"name":"SLATT_CONTRACT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[],"name":"freezeSupply","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":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":"address","name":"_slatt","type":"address"}],"name":"setSlattContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supplyFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"}]

60806040526003805460ff60a01b191690553480156200001e57600080fd5b50604051620021c8380380620021c88339810160408190526200004191620001aa565b806200004d8162000083565b5062000059336200009c565b80516200006e906004906020840190620000ee565b50506006805460ff60a01b19169055620002c3565b805162000098906002906020840190620000ee565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620000fc9062000286565b90600052602060002090601f0160209004810192826200012057600085556200016b565b82601f106200013b57805160ff19168380011785556200016b565b828001600101855582156200016b579182015b828111156200016b5782518255916020019190600101906200014e565b50620001799291506200017d565b5090565b5b808211156200017957600081556001016200017e565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215620001be57600080fd5b82516001600160401b0380821115620001d657600080fd5b818501915085601f830112620001eb57600080fd5b81518181111562000200576200020062000194565b604051601f8201601f19908116603f011681019083821181831017156200022b576200022b62000194565b8160405282815288868487010111156200024457600080fd5b600093505b8284101562000268578484018601518185018701529285019262000249565b828411156200027a5760008684830101525b98975050505050505050565b600181811c908216806200029b57607f821691505b60208210811415620002bd57634e487b7160e01b600052602260045260246000fd5b50919050565b611ef580620002d36000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c80637ec2402f116100ad578063c4d0e5ec11610071578063c4d0e5ec1461026f578063e0df5b6f14610282578063e985e9c514610295578063f242432a146102d1578063f2fde38b146102e457600080fd5b80637ec2402f1461021d5780638da5cb5b14610225578063a22cb46514610236578063a496dedf14610249578063b390c0ab1461025c57600080fd5b80631b2ef1ca116100f45780631b2ef1ca146101b95780632eb2c2d6146101ce5780634e1273f4146101e15780635be64d3714610201578063715018a61461021557600080fd5b8062fdd58e1461012557806301ffc9a71461014b57806305cd6ead1461016e5780630e89341c14610199575b600080fd5b6101386101333660046114c7565b6102f7565b6040519081526020015b60405180910390f35b61015e610159366004611507565b61038e565b6040519015158152602001610142565b600654610181906001600160a01b031681565b6040516001600160a01b039091168152602001610142565b6101ac6101a736600461152b565b6103e0565b604051610142919061159c565b6101cc6101c73660046115af565b610414565b005b6101cc6101dc366004611727565b6104aa565b6101f46101ef36600461183e565b610541565b60405161014291906118dd565b60065461015e90600160a01b900460ff1681565b6101cc61066b565b6101cc6106a1565b6003546001600160a01b0316610181565b6101cc6102443660046118f0565b6106e0565b6101cc61025736600461192c565b6106eb565b6101cc61026a3660046115af565b6107ba565b6101cc61027d36600461197a565b61082e565b6101cc610290366004611995565b610884565b61015e6102a33660046119de565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101cc6102df366004611a11565b6108c1565b6101cc6102f236600461197a565b610948565b60006001600160a01b0383166103685760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806103bf57506001600160e01b031982166303a24d0760e21b145b806103da57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060046103ed836109e3565b6040516020016103fe929190611acd565b6040516020818303038152906040529050919050565b6003546001600160a01b0316331461043e5760405162461bcd60e51b815260040161035f90611b74565b600654600160a01b900460ff161561048b5760405162461bcd60e51b815260206004820152601060248201526f29bab838363c9034b990333937bd32b760811b604482015260640161035f565b6104a633838360405180602001604052806000815250610ae9565b5050565b6001600160a01b0385163314806104c657506104c685336102a3565b61052d5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161035f565b61053a8585858585610bf3565b5050505050565b606081518351146105a65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161035f565b6000835167ffffffffffffffff8111156105c2576105c26115d1565b6040519080825280602002602001820160405280156105eb578160200160208202803683370190505b50905060005b84518110156106635761063685828151811061060f5761060f611ba9565b602002602001015185838151811061062957610629611ba9565b60200260200101516102f7565b82828151811061064857610648611ba9565b602090810291909101015261065c81611bd5565b90506105f1565b509392505050565b6003546001600160a01b031633146106955760405162461bcd60e51b815260040161035f90611b74565b61069f6000610dc8565b565b6003546001600160a01b031633146106cb5760405162461bcd60e51b815260040161035f90611b74565b6006805460ff60a01b1916600160a01b179055565b6104a6338383610e1a565b6003546001600160a01b031633146107155760405162461bcd60e51b815260040161035f90611b74565b600654600160a01b900460ff16156107625760405162461bcd60e51b815260206004820152601060248201526f29bab838363c9034b990333937bd32b760811b604482015260640161035f565b60005b83518110156107b4576107a284828151811061078357610783611ba9565b6020026020010151848460405180602001604052806000815250610ae9565b806107ac81611bd5565b915050610765565b50505050565b6107c5338383610efb565b6005546040516340c10f1960e01b81523360048201526101a460248201526001600160a01b03909116906340c10f1990604401600060405180830381600087803b15801561081257600080fd5b505af1158015610826573d6000803e3d6000fd5b505050505050565b6003546001600160a01b031633146108585760405162461bcd60e51b815260040161035f90611b74565b600580546001600160a01b039092166001600160a01b0319928316811790915560068054909216179055565b6003546001600160a01b031633146108ae5760405162461bcd60e51b815260040161035f90611b74565b80516104a6906004906020840190611412565b6001600160a01b0385163314806108dd57506108dd85336102a3565b61093b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161035f565b61053a8585858585611075565b6003546001600160a01b031633146109725760405162461bcd60e51b815260040161035f90611b74565b6001600160a01b0381166109d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161035f565b6109e081610dc8565b50565b606081610a075750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610a315780610a1b81611bd5565b9150610a2a9050600a83611c06565b9150610a0b565b60008167ffffffffffffffff811115610a4c57610a4c6115d1565b6040519080825280601f01601f191660200182016040528015610a76576020820181803683370190505b5090505b8415610ae157610a8b600183611c1a565b9150610a98600a86611c31565b610aa3906030611c45565b60f81b818381518110610ab857610ab8611ba9565b60200101906001600160f81b031916908160001a905350610ada600a86611c06565b9450610a7a565b949350505050565b6001600160a01b038416610b495760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161035f565b33610b6381600087610b5a88611192565b61053a88611192565b6000848152602081815260408083206001600160a01b038916845290915281208054859290610b93908490611c45565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461053a816000878787876111dd565b8151835114610c555760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161035f565b6001600160a01b038416610c7b5760405162461bcd60e51b815260040161035f90611c5d565b3360005b8451811015610d62576000858281518110610c9c57610c9c611ba9565b602002602001015190506000858381518110610cba57610cba611ba9565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015610d0a5760405162461bcd60e51b815260040161035f90611ca2565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610d47908490611c45565b9250508190555050505080610d5b90611bd5565b9050610c7f565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610db2929190611cec565b60405180910390a4610826818787878787611348565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415610e8e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161035f565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038316610f5d5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b606482015260840161035f565b33610f8d81856000610f6e87611192565b610f7787611192565b5050604080516020810190915260009052505050565b6000838152602081815260408083206001600160a01b03881684529091529020548281101561100a5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b606482015260840161035f565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b03841661109b5760405162461bcd60e51b815260040161035f90611c5d565b336110ab818787610b5a88611192565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156110ec5760405162461bcd60e51b815260040161035f90611ca2565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611129908490611c45565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46111898288888888886111dd565b50505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106111cc576111cc611ba9565b602090810291909101015292915050565b6001600160a01b0384163b156108265760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906112219089908990889088908890600401611d11565b602060405180830381600087803b15801561123b57600080fd5b505af192505050801561126b575060408051601f3d908101601f1916820190925261126891810190611d56565b60015b61131857611277611d73565b806308c379a014156112b1575061128c611d8f565b8061129757506112b3565b8060405162461bcd60e51b815260040161035f919061159c565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161035f565b6001600160e01b0319811663f23a6e6160e01b146111895760405162461bcd60e51b815260040161035f90611e19565b6001600160a01b0384163b156108265760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061138c9089908990889088908890600401611e61565b602060405180830381600087803b1580156113a657600080fd5b505af19250505080156113d6575060408051601f3d908101601f191682019092526113d391810190611d56565b60015b6113e257611277611d73565b6001600160e01b0319811663bc197c8160e01b146111895760405162461bcd60e51b815260040161035f90611e19565b82805461141e90611a76565b90600052602060002090601f0160209004810192826114405760008555611486565b82601f1061145957805160ff1916838001178555611486565b82800160010185558215611486579182015b8281111561148657825182559160200191906001019061146b565b50611492929150611496565b5090565b5b808211156114925760008155600101611497565b80356001600160a01b03811681146114c257600080fd5b919050565b600080604083850312156114da57600080fd5b6114e3836114ab565b946020939093013593505050565b6001600160e01b0319811681146109e057600080fd5b60006020828403121561151957600080fd5b8135611524816114f1565b9392505050565b60006020828403121561153d57600080fd5b5035919050565b60005b8381101561155f578181015183820152602001611547565b838111156107b45750506000910152565b60008151808452611588816020860160208601611544565b601f01601f19169290920160200192915050565b6020815260006115246020830184611570565b600080604083850312156115c257600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff8111828210171561160d5761160d6115d1565b6040525050565b600067ffffffffffffffff82111561162e5761162e6115d1565b5060051b60200190565b600082601f83011261164957600080fd5b8135602061165682611614565b60405161166382826115e7565b83815260059390931b850182019282810191508684111561168357600080fd5b8286015b8481101561169e5780358352918301918301611687565b509695505050505050565b600067ffffffffffffffff8311156116c3576116c36115d1565b6040516116da601f8501601f1916602001826115e7565b8091508381528484840111156116ef57600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261171857600080fd5b611524838335602085016116a9565b600080600080600060a0868803121561173f57600080fd5b611748866114ab565b9450611756602087016114ab565b9350604086013567ffffffffffffffff8082111561177357600080fd5b61177f89838a01611638565b9450606088013591508082111561179557600080fd5b6117a189838a01611638565b935060808801359150808211156117b757600080fd5b506117c488828901611707565b9150509295509295909350565b600082601f8301126117e257600080fd5b813560206117ef82611614565b6040516117fc82826115e7565b83815260059390931b850182019282810191508684111561181c57600080fd5b8286015b8481101561169e57611831816114ab565b8352918301918301611820565b6000806040838503121561185157600080fd5b823567ffffffffffffffff8082111561186957600080fd5b611875868387016117d1565b9350602085013591508082111561188b57600080fd5b5061189885828601611638565b9150509250929050565b600081518084526020808501945080840160005b838110156118d2578151875295820195908201906001016118b6565b509495945050505050565b60208152600061152460208301846118a2565b6000806040838503121561190357600080fd5b61190c836114ab565b91506020830135801515811461192157600080fd5b809150509250929050565b60008060006060848603121561194157600080fd5b833567ffffffffffffffff81111561195857600080fd5b611964868287016117d1565b9660208601359650604090950135949350505050565b60006020828403121561198c57600080fd5b611524826114ab565b6000602082840312156119a757600080fd5b813567ffffffffffffffff8111156119be57600080fd5b8201601f810184136119cf57600080fd5b610ae1848235602084016116a9565b600080604083850312156119f157600080fd5b6119fa836114ab565b9150611a08602084016114ab565b90509250929050565b600080600080600060a08688031215611a2957600080fd5b611a32866114ab565b9450611a40602087016114ab565b93506040860135925060608601359150608086013567ffffffffffffffff811115611a6a57600080fd5b6117c488828901611707565b600181811c90821680611a8a57607f821691505b60208210811415611aab57634e487b7160e01b600052602260045260246000fd5b50919050565b60008151611ac3818560208601611544565b9290920192915050565b600080845481600182811c915080831680611ae957607f831692505b6020808410821415611b0957634e487b7160e01b86526022600452602486fd5b818015611b1d5760018114611b2e57611b5b565b60ff19861689528489019650611b5b565b60008b81526020902060005b86811015611b535781548b820152908501908301611b3a565b505084890196505b505050505050611b6b8185611ab1565b95945050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611be957611be9611bbf565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082611c1557611c15611bf0565b500490565b600082821015611c2c57611c2c611bbf565b500390565b600082611c4057611c40611bf0565b500690565b60008219821115611c5857611c58611bbf565b500190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000611cff60408301856118a2565b8281036020840152611b6b81856118a2565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611d4b90830184611570565b979650505050505050565b600060208284031215611d6857600080fd5b8151611524816114f1565b600060033d1115611d8c5760046000803e5060005160e01c5b90565b600060443d1015611d9d5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611dcd57505050505090565b8285019150815181811115611de55750505050505090565b843d8701016020828501011115611dff5750505050505090565b611e0e602082860101876115e7565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090611e8d908301866118a2565b8281036060840152611e9f81866118a2565b90508281036080840152611eb38185611570565b9897505050505050505056fea264697066735822122034a2da69c0d56ada665c9854f132dae0a2a650e4403e79207c0d3d2f25ef97dc64736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d557a356d6e6566683961516d5678666a75546f6b6447764756747769334178416a6b615169554258787a73392f00000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101205760003560e01c80637ec2402f116100ad578063c4d0e5ec11610071578063c4d0e5ec1461026f578063e0df5b6f14610282578063e985e9c514610295578063f242432a146102d1578063f2fde38b146102e457600080fd5b80637ec2402f1461021d5780638da5cb5b14610225578063a22cb46514610236578063a496dedf14610249578063b390c0ab1461025c57600080fd5b80631b2ef1ca116100f45780631b2ef1ca146101b95780632eb2c2d6146101ce5780634e1273f4146101e15780635be64d3714610201578063715018a61461021557600080fd5b8062fdd58e1461012557806301ffc9a71461014b57806305cd6ead1461016e5780630e89341c14610199575b600080fd5b6101386101333660046114c7565b6102f7565b6040519081526020015b60405180910390f35b61015e610159366004611507565b61038e565b6040519015158152602001610142565b600654610181906001600160a01b031681565b6040516001600160a01b039091168152602001610142565b6101ac6101a736600461152b565b6103e0565b604051610142919061159c565b6101cc6101c73660046115af565b610414565b005b6101cc6101dc366004611727565b6104aa565b6101f46101ef36600461183e565b610541565b60405161014291906118dd565b60065461015e90600160a01b900460ff1681565b6101cc61066b565b6101cc6106a1565b6003546001600160a01b0316610181565b6101cc6102443660046118f0565b6106e0565b6101cc61025736600461192c565b6106eb565b6101cc61026a3660046115af565b6107ba565b6101cc61027d36600461197a565b61082e565b6101cc610290366004611995565b610884565b61015e6102a33660046119de565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6101cc6102df366004611a11565b6108c1565b6101cc6102f236600461197a565b610948565b60006001600160a01b0383166103685760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806103bf57506001600160e01b031982166303a24d0760e21b145b806103da57506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060046103ed836109e3565b6040516020016103fe929190611acd565b6040516020818303038152906040529050919050565b6003546001600160a01b0316331461043e5760405162461bcd60e51b815260040161035f90611b74565b600654600160a01b900460ff161561048b5760405162461bcd60e51b815260206004820152601060248201526f29bab838363c9034b990333937bd32b760811b604482015260640161035f565b6104a633838360405180602001604052806000815250610ae9565b5050565b6001600160a01b0385163314806104c657506104c685336102a3565b61052d5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b606482015260840161035f565b61053a8585858585610bf3565b5050505050565b606081518351146105a65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b606482015260840161035f565b6000835167ffffffffffffffff8111156105c2576105c26115d1565b6040519080825280602002602001820160405280156105eb578160200160208202803683370190505b50905060005b84518110156106635761063685828151811061060f5761060f611ba9565b602002602001015185838151811061062957610629611ba9565b60200260200101516102f7565b82828151811061064857610648611ba9565b602090810291909101015261065c81611bd5565b90506105f1565b509392505050565b6003546001600160a01b031633146106955760405162461bcd60e51b815260040161035f90611b74565b61069f6000610dc8565b565b6003546001600160a01b031633146106cb5760405162461bcd60e51b815260040161035f90611b74565b6006805460ff60a01b1916600160a01b179055565b6104a6338383610e1a565b6003546001600160a01b031633146107155760405162461bcd60e51b815260040161035f90611b74565b600654600160a01b900460ff16156107625760405162461bcd60e51b815260206004820152601060248201526f29bab838363c9034b990333937bd32b760811b604482015260640161035f565b60005b83518110156107b4576107a284828151811061078357610783611ba9565b6020026020010151848460405180602001604052806000815250610ae9565b806107ac81611bd5565b915050610765565b50505050565b6107c5338383610efb565b6005546040516340c10f1960e01b81523360048201526101a460248201526001600160a01b03909116906340c10f1990604401600060405180830381600087803b15801561081257600080fd5b505af1158015610826573d6000803e3d6000fd5b505050505050565b6003546001600160a01b031633146108585760405162461bcd60e51b815260040161035f90611b74565b600580546001600160a01b039092166001600160a01b0319928316811790915560068054909216179055565b6003546001600160a01b031633146108ae5760405162461bcd60e51b815260040161035f90611b74565b80516104a6906004906020840190611412565b6001600160a01b0385163314806108dd57506108dd85336102a3565b61093b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b606482015260840161035f565b61053a8585858585611075565b6003546001600160a01b031633146109725760405162461bcd60e51b815260040161035f90611b74565b6001600160a01b0381166109d75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161035f565b6109e081610dc8565b50565b606081610a075750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610a315780610a1b81611bd5565b9150610a2a9050600a83611c06565b9150610a0b565b60008167ffffffffffffffff811115610a4c57610a4c6115d1565b6040519080825280601f01601f191660200182016040528015610a76576020820181803683370190505b5090505b8415610ae157610a8b600183611c1a565b9150610a98600a86611c31565b610aa3906030611c45565b60f81b818381518110610ab857610ab8611ba9565b60200101906001600160f81b031916908160001a905350610ada600a86611c06565b9450610a7a565b949350505050565b6001600160a01b038416610b495760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b606482015260840161035f565b33610b6381600087610b5a88611192565b61053a88611192565b6000848152602081815260408083206001600160a01b038916845290915281208054859290610b93908490611c45565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461053a816000878787876111dd565b8151835114610c555760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b606482015260840161035f565b6001600160a01b038416610c7b5760405162461bcd60e51b815260040161035f90611c5d565b3360005b8451811015610d62576000858281518110610c9c57610c9c611ba9565b602002602001015190506000858381518110610cba57610cba611ba9565b602090810291909101810151600084815280835260408082206001600160a01b038e168352909352919091205490915081811015610d0a5760405162461bcd60e51b815260040161035f90611ca2565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610d47908490611c45565b9250508190555050505080610d5b90611bd5565b9050610c7f565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610db2929190611cec565b60405180910390a4610826818787878787611348565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b03161415610e8e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b606482015260840161035f565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038316610f5d5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b606482015260840161035f565b33610f8d81856000610f6e87611192565b610f7787611192565b5050604080516020810190915260009052505050565b6000838152602081815260408083206001600160a01b03881684529091529020548281101561100a5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b606482015260840161035f565b6000848152602081815260408083206001600160a01b03898116808652918452828520888703905582518981529384018890529092908616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a45050505050565b6001600160a01b03841661109b5760405162461bcd60e51b815260040161035f90611c5d565b336110ab818787610b5a88611192565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156110ec5760405162461bcd60e51b815260040161035f90611ca2565b6000858152602081815260408083206001600160a01b038b8116855292528083208785039055908816825281208054869290611129908490611c45565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46111898288888888886111dd565b50505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106111cc576111cc611ba9565b602090810291909101015292915050565b6001600160a01b0384163b156108265760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906112219089908990889088908890600401611d11565b602060405180830381600087803b15801561123b57600080fd5b505af192505050801561126b575060408051601f3d908101601f1916820190925261126891810190611d56565b60015b61131857611277611d73565b806308c379a014156112b1575061128c611d8f565b8061129757506112b3565b8060405162461bcd60e51b815260040161035f919061159c565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161035f565b6001600160e01b0319811663f23a6e6160e01b146111895760405162461bcd60e51b815260040161035f90611e19565b6001600160a01b0384163b156108265760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061138c9089908990889088908890600401611e61565b602060405180830381600087803b1580156113a657600080fd5b505af19250505080156113d6575060408051601f3d908101601f191682019092526113d391810190611d56565b60015b6113e257611277611d73565b6001600160e01b0319811663bc197c8160e01b146111895760405162461bcd60e51b815260040161035f90611e19565b82805461141e90611a76565b90600052602060002090601f0160209004810192826114405760008555611486565b82601f1061145957805160ff1916838001178555611486565b82800160010185558215611486579182015b8281111561148657825182559160200191906001019061146b565b50611492929150611496565b5090565b5b808211156114925760008155600101611497565b80356001600160a01b03811681146114c257600080fd5b919050565b600080604083850312156114da57600080fd5b6114e3836114ab565b946020939093013593505050565b6001600160e01b0319811681146109e057600080fd5b60006020828403121561151957600080fd5b8135611524816114f1565b9392505050565b60006020828403121561153d57600080fd5b5035919050565b60005b8381101561155f578181015183820152602001611547565b838111156107b45750506000910152565b60008151808452611588816020860160208601611544565b601f01601f19169290920160200192915050565b6020815260006115246020830184611570565b600080604083850312156115c257600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff8111828210171561160d5761160d6115d1565b6040525050565b600067ffffffffffffffff82111561162e5761162e6115d1565b5060051b60200190565b600082601f83011261164957600080fd5b8135602061165682611614565b60405161166382826115e7565b83815260059390931b850182019282810191508684111561168357600080fd5b8286015b8481101561169e5780358352918301918301611687565b509695505050505050565b600067ffffffffffffffff8311156116c3576116c36115d1565b6040516116da601f8501601f1916602001826115e7565b8091508381528484840111156116ef57600080fd5b83836020830137600060208583010152509392505050565b600082601f83011261171857600080fd5b611524838335602085016116a9565b600080600080600060a0868803121561173f57600080fd5b611748866114ab565b9450611756602087016114ab565b9350604086013567ffffffffffffffff8082111561177357600080fd5b61177f89838a01611638565b9450606088013591508082111561179557600080fd5b6117a189838a01611638565b935060808801359150808211156117b757600080fd5b506117c488828901611707565b9150509295509295909350565b600082601f8301126117e257600080fd5b813560206117ef82611614565b6040516117fc82826115e7565b83815260059390931b850182019282810191508684111561181c57600080fd5b8286015b8481101561169e57611831816114ab565b8352918301918301611820565b6000806040838503121561185157600080fd5b823567ffffffffffffffff8082111561186957600080fd5b611875868387016117d1565b9350602085013591508082111561188b57600080fd5b5061189885828601611638565b9150509250929050565b600081518084526020808501945080840160005b838110156118d2578151875295820195908201906001016118b6565b509495945050505050565b60208152600061152460208301846118a2565b6000806040838503121561190357600080fd5b61190c836114ab565b91506020830135801515811461192157600080fd5b809150509250929050565b60008060006060848603121561194157600080fd5b833567ffffffffffffffff81111561195857600080fd5b611964868287016117d1565b9660208601359650604090950135949350505050565b60006020828403121561198c57600080fd5b611524826114ab565b6000602082840312156119a757600080fd5b813567ffffffffffffffff8111156119be57600080fd5b8201601f810184136119cf57600080fd5b610ae1848235602084016116a9565b600080604083850312156119f157600080fd5b6119fa836114ab565b9150611a08602084016114ab565b90509250929050565b600080600080600060a08688031215611a2957600080fd5b611a32866114ab565b9450611a40602087016114ab565b93506040860135925060608601359150608086013567ffffffffffffffff811115611a6a57600080fd5b6117c488828901611707565b600181811c90821680611a8a57607f821691505b60208210811415611aab57634e487b7160e01b600052602260045260246000fd5b50919050565b60008151611ac3818560208601611544565b9290920192915050565b600080845481600182811c915080831680611ae957607f831692505b6020808410821415611b0957634e487b7160e01b86526022600452602486fd5b818015611b1d5760018114611b2e57611b5b565b60ff19861689528489019650611b5b565b60008b81526020902060005b86811015611b535781548b820152908501908301611b3a565b505084890196505b505050505050611b6b8185611ab1565b95945050505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611be957611be9611bbf565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082611c1557611c15611bf0565b500490565b600082821015611c2c57611c2c611bbf565b500390565b600082611c4057611c40611bf0565b500690565b60008219821115611c5857611c58611bbf565b500190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b604081526000611cff60408301856118a2565b8281036020840152611b6b81856118a2565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090611d4b90830184611570565b979650505050505050565b600060208284031215611d6857600080fd5b8151611524816114f1565b600060033d1115611d8c5760046000803e5060005160e01c5b90565b600060443d1015611d9d5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611dcd57505050505090565b8285019150815181811115611de55750505050505090565b843d8701016020828501011115611dff5750505050505090565b611e0e602082860101876115e7565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b0386811682528516602082015260a060408201819052600090611e8d908301866118a2565b8281036060840152611e9f81866118a2565b90508281036080840152611eb38185611570565b9897505050505050505056fea264697066735822122034a2da69c0d56ada665c9854f132dae0a2a650e4403e79207c0d3d2f25ef97dc64736f6c63430008090033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d557a356d6e6566683961516d5678666a75546f6b6447764756747769334178416a6b615169554258787a73392f00000000000000000000

-----Decoded View---------------
Arg [0] : _baseURI (string): ipfs://QmUz5mnefh9aQmVxfjuTokdGvGVtwi3AxAjkaQiUBXxzs9/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d557a356d6e6566683961516d5678666a75546f6b644776
Arg [3] : 4756747769334178416a6b615169554258787a73392f00000000000000000000


Deployed Bytecode Sourcemap

36962:1392:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21042:231;;;;;;:::i;:::-;;:::i;:::-;;;597:25:1;;;585:2;570:18;21042:231:0;;;;;;;;20065:310;;;;;;:::i;:::-;;:::i;:::-;;;1184:14:1;;1177:22;1159:41;;1147:2;1132:18;20065:310:0;1019:187:1;37072:29:0;;;;;-1:-1:-1;;;;;37072:29:0;;;;;;-1:-1:-1;;;;;1375:32:1;;;1357:51;;1345:2;1330:18;37072:29:0;1211:203:1;38203:148:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;37429:160::-;;;;;;:::i;:::-;;:::i;:::-;;22981:442;;;;;;:::i;:::-;;:::i;21439:524::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;37108:24::-;;;;;-1:-1:-1;;;37108:24:0;;;;;;36172:94;;;:::i;38114:81::-;;;:::i;35521:87::-;35594:6;;-1:-1:-1;;;;;35594:6:0;35521:87;;22036:155;;;;;;:::i;:::-;;:::i;37597:265::-;;;;;;:::i;:::-;;:::i;37870:131::-;;;;;;:::i;:::-;;:::i;37278:143::-;;;;;;:::i;:::-;;:::i;38009:97::-;;;;;;:::i;:::-;;:::i;22263:168::-;;;;;;:::i;:::-;-1:-1:-1;;;;;22386:27:0;;;22362:4;22386:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;22263:168;22503:401;;;;;;:::i;:::-;;:::i;36421:229::-;;;;;;:::i;:::-;;:::i;21042:231::-;21128:7;-1:-1:-1;;;;;21156:21:0;;21148:77;;;;-1:-1:-1;;;21148:77:0;;10185:2:1;21148:77:0;;;10167:21:1;10224:2;10204:18;;;10197:30;10263:34;10243:18;;;10236:62;-1:-1:-1;;;10314:18:1;;;10307:41;10365:19;;21148:77:0;;;;;;;;;-1:-1:-1;21243:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;21243:22:0;;;;;;;;;;;;21042:231::o;20065:310::-;20167:4;-1:-1:-1;;;;;;20204:41:0;;-1:-1:-1;;;20204:41:0;;:110;;-1:-1:-1;;;;;;;20262:52:0;;-1:-1:-1;;;20262:52:0;20204:110;:163;;;-1:-1:-1;;;;;;;;;;18931:40:0;;;20331:36;20184:183;20065:310;-1:-1:-1;;20065:310:0:o;38203:148::-;38258:13;38320:7;38329:12;38338:2;38329:8;:12::i;:::-;38303:39;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38289:54;;38203:148;;;:::o;37429:160::-;35594:6;;-1:-1:-1;;;;;35594:6:0;17906:10;35741:23;35733:68;;;;-1:-1:-1;;;35733:68:0;;;;;;;:::i;:::-;37504:12:::1;::::0;-1:-1:-1;;;37504:12:0;::::1;;;37503:13;37495:42;;;::::0;-1:-1:-1;;;37495:42:0;;12838:2:1;37495:42:0::1;::::0;::::1;12820:21:1::0;12877:2;12857:18;;;12850:30;-1:-1:-1;;;12896:18:1;;;12889:46;12952:18;;37495:42:0::1;12636:340:1::0;37495:42:0::1;37548:33;37554:10;37566:2;37570:6;37548:33;;;;;;;;;;;::::0;:5:::1;:33::i;:::-;37429:160:::0;;:::o;22981:442::-;-1:-1:-1;;;;;23214:20:0;;17906:10;23214:20;;:60;;-1:-1:-1;23238:36:0;23255:4;17906:10;22263:168;:::i;23238:36::-;23192:160;;;;-1:-1:-1;;;23192:160:0;;13183:2:1;23192:160:0;;;13165:21:1;13222:2;13202:18;;;13195:30;13261:34;13241:18;;;13234:62;-1:-1:-1;;;13312:18:1;;;13305:48;13370:19;;23192:160:0;12981:414:1;23192:160:0;23363:52;23386:4;23392:2;23396:3;23401:7;23410:4;23363:22;:52::i;:::-;22981:442;;;;;:::o;21439:524::-;21595:16;21656:3;:10;21637:8;:15;:29;21629:83;;;;-1:-1:-1;;;21629:83:0;;13602:2:1;21629:83:0;;;13584:21:1;13641:2;13621:18;;;13614:30;13680:34;13660:18;;;13653:62;-1:-1:-1;;;13731:18:1;;;13724:39;13780:19;;21629:83:0;13400:405:1;21629:83:0;21725:30;21772:8;:15;21758:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21758:30:0;;21725:63;;21806:9;21801:122;21825:8;:15;21821:1;:19;21801:122;;;21881:30;21891:8;21900:1;21891:11;;;;;;;;:::i;:::-;;;;;;;21904:3;21908:1;21904:6;;;;;;;;:::i;:::-;;;;;;;21881:9;:30::i;:::-;21862:13;21876:1;21862:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;21842:3;;;:::i;:::-;;;21801:122;;;-1:-1:-1;21942:13:0;21439:524;-1:-1:-1;;;21439:524:0:o;36172:94::-;35594:6;;-1:-1:-1;;;;;35594:6:0;17906:10;35741:23;35733:68;;;;-1:-1:-1;;;35733:68:0;;;;;;;:::i;:::-;36237:21:::1;36255:1;36237:9;:21::i;:::-;36172:94::o:0;38114:81::-;35594:6;;-1:-1:-1;;;;;35594:6:0;17906:10;35741:23;35733:68;;;;-1:-1:-1;;;35733:68:0;;;;;;;:::i;:::-;38168:12:::1;:19:::0;;-1:-1:-1;;;;38168:19:0::1;-1:-1:-1::0;;;38168:19:0::1;::::0;;38114:81::o;22036:155::-;22131:52;17906:10;22164:8;22174;22131:18;:52::i;37597:265::-;35594:6;;-1:-1:-1;;;;;35594:6:0;17906:10;35741:23;35733:68;;;;-1:-1:-1;;;35733:68:0;;;;;;;:::i;:::-;37704:12:::1;::::0;-1:-1:-1;;;37704:12:0;::::1;;;37703:13;37695:42;;;::::0;-1:-1:-1;;;37695:42:0;;12838:2:1;37695:42:0::1;::::0;::::1;12820:21:1::0;12877:2;12857:18;;;12850:30;-1:-1:-1;;;12896:18:1;;;12889:46;12952:18;;37695:42:0::1;12636:340:1::0;37695:42:0::1;37752:6;37748:107;37768:10;:17;37764:1;:21;37748:107;;;37807:36;37813:10;37824:1;37813:13;;;;;;;;:::i;:::-;;;;;;;37828:2;37832:6;37807:36;;;;;;;;;;;::::0;:5:::1;:36::i;:::-;37787:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37748:107;;;;37597:265:::0;;;:::o;37870:131::-;37926:29;37932:10;37944:2;37948:6;37926:5;:29::i;:::-;37966:5;;:27;;-1:-1:-1;;;37966:27:0;;37977:10;37966:27;;;14398:51:1;37989:3:0;14465:18:1;;;14458:34;-1:-1:-1;;;;;37966:5:0;;;;:10;;14371:18:1;;37966:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37870:131;;:::o;37278:143::-;35594:6;;-1:-1:-1;;;;;35594:6:0;17906:10;35741:23;35733:68;;;;-1:-1:-1;;;35733:68:0;;;;;;;:::i;:::-;37350:5:::1;:29:::0;;-1:-1:-1;;;;;37350:29:0;;::::1;-1:-1:-1::0;;;;;;37350:29:0;;::::1;::::0;::::1;::::0;;;37390:14:::1;:23:::0;;;;::::1;;::::0;;37278:143::o;38009:97::-;35594:6;;-1:-1:-1;;;;;35594:6:0;17906:10;35741:23;35733:68;;;;-1:-1:-1;;;35733:68:0;;;;;;;:::i;:::-;38082:16;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;22503:401::-:0;-1:-1:-1;;;;;22711:20:0;;17906:10;22711:20;;:60;;-1:-1:-1;22735:36:0;22752:4;17906:10;22263:168;:::i;22735:36::-;22689:151;;;;-1:-1:-1;;;22689:151:0;;14705:2:1;22689:151:0;;;14687:21:1;14744:2;14724:18;;;14717:30;14783:34;14763:18;;;14756:62;-1:-1:-1;;;14834:18:1;;;14827:39;14883:19;;22689:151:0;14503:405:1;22689:151:0;22851:45;22869:4;22875:2;22879;22883:6;22891:4;22851:17;:45::i;36421:229::-;35594:6;;-1:-1:-1;;;;;35594:6:0;17906:10;35741:23;35733:68;;;;-1:-1:-1;;;35733:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36524:22:0;::::1;36502:110;;;::::0;-1:-1:-1;;;36502:110:0;;15115:2:1;36502:110:0::1;::::0;::::1;15097:21:1::0;15154:2;15134:18;;;15127:30;15193:34;15173:18;;;15166:62;-1:-1:-1;;;15244:18:1;;;15237:36;15290:19;;36502:110:0::1;14913:402:1::0;36502:110:0::1;36623:19;36633:8;36623:9;:19::i;:::-;36421:229:::0;:::o;142:532::-;198:13;228:10;224:53;;-1:-1:-1;;255:10:0;;;;;;;;;;;;-1:-1:-1;;;255:10:0;;;;;142:532::o;224:53::-;302:5;287:12;343:78;350:9;;343:78;;376:8;;;;:::i;:::-;;-1:-1:-1;399:10:0;;-1:-1:-1;407:2:0;399:10;;:::i;:::-;;;343:78;;;431:19;463:6;453:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;453:17:0;;431:39;;481:154;488:10;;481:154;;515:11;525:1;515:11;;:::i;:::-;;-1:-1:-1;584:10:0;592:2;584:5;:10;:::i;:::-;571:24;;:2;:24;:::i;:::-;558:39;;541:6;548;541:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;541:56:0;;;;;;;;-1:-1:-1;612:11:0;621:2;612:11;;:::i;:::-;;;481:154;;;659:6;142:532;-1:-1:-1;;;;142:532:0:o;27457:569::-;-1:-1:-1;;;;;27610:16:0;;27602:62;;;;-1:-1:-1;;;27602:62:0;;16159:2:1;27602:62:0;;;16141:21:1;16198:2;16178:18;;;16171:30;16237:34;16217:18;;;16210:62;-1:-1:-1;;;16288:18:1;;;16281:31;16329:19;;27602:62:0;15957:397:1;27602:62:0;17906:10;27721:102;17906:10;27677:16;27764:2;27768:21;27786:2;27768:17;:21::i;:::-;27791:25;27809:6;27791:17;:25::i;27721:102::-;27836:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27836:17:0;;;;;;;;;:27;;27857:6;;27836:9;:27;;27857:6;;27836:27;:::i;:::-;;;;-1:-1:-1;;27879:52:0;;;16533:25:1;;;16589:2;16574:18;;16567:34;;;-1:-1:-1;;;;;27879:52:0;;;;27912:1;;27879:52;;;;;;16506:18:1;27879:52:0;;;;;;;27944:74;27975:8;27993:1;27997:2;28001;28005:6;28013:4;27944:30;:74::i;25065:1074::-;25292:7;:14;25278:3;:10;:28;25270:81;;;;-1:-1:-1;;;25270:81:0;;16814:2:1;25270:81:0;;;16796:21:1;16853:2;16833:18;;;16826:30;16892:34;16872:18;;;16865:62;-1:-1:-1;;;16943:18:1;;;16936:38;16991:19;;25270:81:0;16612:404:1;25270:81:0;-1:-1:-1;;;;;25370:16:0;;25362:66;;;;-1:-1:-1;;;25362:66:0;;;;;;;:::i;:::-;17906:10;25441:16;25558:421;25582:3;:10;25578:1;:14;25558:421;;;25614:10;25627:3;25631:1;25627:6;;;;;;;;:::i;:::-;;;;;;;25614:19;;25648:14;25665:7;25673:1;25665:10;;;;;;;;:::i;:::-;;;;;;;;;;;;25692:19;25714:13;;;;;;;;;;-1:-1:-1;;;;;25714:19:0;;;;;;;;;;;;25665:10;;-1:-1:-1;25756:21:0;;;;25748:76;;;;-1:-1:-1;;;25748:76:0;;;;;;;:::i;:::-;25868:9;:13;;;;;;;;;;;-1:-1:-1;;;;;25868:19:0;;;;;;;;;;25890:20;;;25868:42;;25940:17;;;;;;;:27;;25890:20;;25868:9;25940:27;;25890:20;;25940:27;:::i;:::-;;;;;;;;25599:380;;;25594:3;;;;:::i;:::-;;;25558:421;;;;26026:2;-1:-1:-1;;;;;25996:47:0;26020:4;-1:-1:-1;;;;;25996:47:0;26010:8;-1:-1:-1;;;;;25996:47:0;;26030:3;26035:7;25996:47;;;;;;;:::i;:::-;;;;;;;;26056:75;26092:8;26102:4;26108:2;26112:3;26117:7;26126:4;26056:35;:75::i;36658:173::-;36733:6;;;-1:-1:-1;;;;;36750:17:0;;;-1:-1:-1;;;;;;36750:17:0;;;;;;;36783:40;;36733:6;;;36750:17;36733:6;;36783:40;;36714:16;;36783:40;36703:128;36658:173;:::o;31251:331::-;31406:8;-1:-1:-1;;;;;31397:17:0;:5;-1:-1:-1;;;;;31397:17:0;;;31389:71;;;;-1:-1:-1;;;31389:71:0;;18510:2:1;31389:71:0;;;18492:21:1;18549:2;18529:18;;;18522:30;18588:34;18568:18;;;18561:62;-1:-1:-1;;;18639:18:1;;;18632:39;18688:19;;31389:71:0;18308:405:1;31389:71:0;-1:-1:-1;;;;;31471:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;31471:46:0;;;;;;;;;;31533:41;;1159::1;;;31533::0;;1132:18:1;31533:41:0;;;;;;;31251:331;;;:::o;29367:648::-;-1:-1:-1;;;;;29494:18:0;;29486:66;;;;-1:-1:-1;;;29486:66:0;;18920:2:1;29486:66:0;;;18902:21:1;18959:2;18939:18;;;18932:30;18998:34;18978:18;;;18971:62;-1:-1:-1;;;19049:18:1;;;19042:33;19092:19;;29486:66:0;18718:399:1;29486:66:0;17906:10;29609:102;17906:10;29640:4;29565:16;29658:21;29676:2;29658:17;:21::i;:::-;29681:25;29699:6;29681:17;:25::i;:::-;-1:-1:-1;;29609:102:0;;;;;;;;;-1:-1:-1;29609:102:0;;-1:-1:-1;;;37870:131:0;29609:102;29724:19;29746:13;;;;;;;;;;;-1:-1:-1;;;;;29746:19:0;;;;;;;;;;29784:21;;;;29776:70;;;;-1:-1:-1;;;29776:70:0;;19324:2:1;29776:70:0;;;19306:21:1;19363:2;19343:18;;;19336:30;19402:34;19382:18;;;19375:62;-1:-1:-1;;;19453:18:1;;;19446:34;19497:19;;29776:70:0;19122:400:1;29776:70:0;29882:9;:13;;;;;;;;;;;-1:-1:-1;;;;;29882:19:0;;;;;;;;;;;;29904:20;;;29882:42;;29953:54;;16533:25:1;;;16574:18;;;16567:34;;;29882:19:0;;29953:54;;;;;;16506:18:1;29953:54:0;;;;;;;29475:540;;29367:648;;;:::o;23887:820::-;-1:-1:-1;;;;;24075:16:0;;24067:66;;;;-1:-1:-1;;;24067:66:0;;;;;;;:::i;:::-;17906:10;24190:96;17906:10;24221:4;24227:2;24231:21;24249:2;24231:17;:21::i;24190:96::-;24299:19;24321:13;;;;;;;;;;;-1:-1:-1;;;;;24321:19:0;;;;;;;;;;24359:21;;;;24351:76;;;;-1:-1:-1;;;24351:76:0;;;;;;;:::i;:::-;24463:9;:13;;;;;;;;;;;-1:-1:-1;;;;;24463:19:0;;;;;;;;;;24485:20;;;24463:42;;24527:17;;;;;;;:27;;24485:20;;24463:9;24527:27;;24485:20;;24527:27;:::i;:::-;;;;-1:-1:-1;;24572:46:0;;;16533:25:1;;;16589:2;16574:18;;16567:34;;;-1:-1:-1;;;;;24572:46:0;;;;;;;;;;;;;;16506:18:1;24572:46:0;;;;;;;24631:68;24662:8;24672:4;24678:2;24682;24686:6;24694:4;24631:30;:68::i;:::-;24056:651;;23887:820;;;;;:::o;34340:198::-;34460:16;;;34474:1;34460:16;;;;;;;;;34406;;34435:22;;34460:16;;;;;;;;;;;;-1:-1:-1;34460:16:0;34435:41;;34498:7;34487:5;34493:1;34487:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;34525:5;34340:198;-1:-1:-1;;34340:198:0:o;32767:744::-;-1:-1:-1;;;;;32982:13:0;;9770:20;9818:8;32978:526;;33018:72;;-1:-1:-1;;;33018:72:0;;-1:-1:-1;;;;;33018:38:0;;;;;:72;;33057:8;;33067:4;;33073:2;;33077:6;;33085:4;;33018:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33018:72:0;;;;;;;;-1:-1:-1;;33018:72:0;;;;;;;;;;;;:::i;:::-;;;33014:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33366:6;33359:14;;-1:-1:-1;;;33359:14:0;;;;;;;;:::i;33014:479::-;;;33415:62;;-1:-1:-1;;;33415:62:0;;21420:2:1;33415:62:0;;;21402:21:1;21459:2;21439:18;;;21432:30;21498:34;21478:18;;;21471:62;-1:-1:-1;;;21549:18:1;;;21542:50;21609:19;;33415:62:0;21218:416:1;33014:479:0;-1:-1:-1;;;;;;33140:55:0;;-1:-1:-1;;;33140:55:0;33136:154;;33220:50;;-1:-1:-1;;;33220:50:0;;;;;;;:::i;33519:813::-;-1:-1:-1;;;;;33759:13:0;;9770:20;9818:8;33755:570;;33795:79;;-1:-1:-1;;;33795:79:0;;-1:-1:-1;;;;;33795:43:0;;;;;:79;;33839:8;;33849:4;;33855:3;;33860:7;;33869:4;;33795:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33795:79:0;;;;;;;;-1:-1:-1;;33795:79:0;;;;;;;;;;;;:::i;:::-;;;33791:523;;;;:::i;:::-;-1:-1:-1;;;;;;33956:60:0;;-1:-1:-1;;;33956:60:0;33952:159;;34041:50;;-1:-1:-1;;;34041:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:254::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:1:o;633:131::-;-1:-1:-1;;;;;;707:32:1;;697:43;;687:71;;754:1;751;744:12;769:245;827:6;880:2;868:9;859:7;855:23;851:32;848:52;;;896:1;893;886:12;848:52;935:9;922:23;954:30;978:5;954:30;:::i;:::-;1003:5;769:245;-1:-1:-1;;;769:245:1:o;1419:180::-;1478:6;1531:2;1519:9;1510:7;1506:23;1502:32;1499:52;;;1547:1;1544;1537:12;1499:52;-1:-1:-1;1570:23:1;;1419:180;-1:-1:-1;1419:180:1:o;1604:258::-;1676:1;1686:113;1700:6;1697:1;1694:13;1686:113;;;1776:11;;;1770:18;1757:11;;;1750:39;1722:2;1715:10;1686:113;;;1817:6;1814:1;1811:13;1808:48;;;-1:-1:-1;;1852:1:1;1834:16;;1827:27;1604:258::o;1867:269::-;1920:3;1958:5;1952:12;1985:6;1980:3;1973:19;2001:63;2057:6;2050:4;2045:3;2041:14;2034:4;2027:5;2023:16;2001:63;:::i;:::-;2118:2;2097:15;-1:-1:-1;;2093:29:1;2084:39;;;;2125:4;2080:50;;1867:269;-1:-1:-1;;1867:269:1:o;2141:231::-;2290:2;2279:9;2272:21;2253:4;2310:56;2362:2;2351:9;2347:18;2339:6;2310:56;:::i;2377:248::-;2445:6;2453;2506:2;2494:9;2485:7;2481:23;2477:32;2474:52;;;2522:1;2519;2512:12;2474:52;-1:-1:-1;;2545:23:1;;;2615:2;2600:18;;;2587:32;;-1:-1:-1;2377:248:1:o;2630:127::-;2691:10;2686:3;2682:20;2679:1;2672:31;2722:4;2719:1;2712:15;2746:4;2743:1;2736:15;2762:249;2872:2;2853:13;;-1:-1:-1;;2849:27:1;2837:40;;2907:18;2892:34;;2928:22;;;2889:62;2886:88;;;2954:18;;:::i;:::-;2990:2;2983:22;-1:-1:-1;;2762:249:1:o;3016:183::-;3076:4;3109:18;3101:6;3098:30;3095:56;;;3131:18;;:::i;:::-;-1:-1:-1;3176:1:1;3172:14;3188:4;3168:25;;3016:183::o;3204:724::-;3258:5;3311:3;3304:4;3296:6;3292:17;3288:27;3278:55;;3329:1;3326;3319:12;3278:55;3365:6;3352:20;3391:4;3414:43;3454:2;3414:43;:::i;:::-;3486:2;3480:9;3498:31;3526:2;3518:6;3498:31;:::i;:::-;3564:18;;;3656:1;3652:10;;;;3640:23;;3636:32;;;3598:15;;;;-1:-1:-1;3680:15:1;;;3677:35;;;3708:1;3705;3698:12;3677:35;3744:2;3736:6;3732:15;3756:142;3772:6;3767:3;3764:15;3756:142;;;3838:17;;3826:30;;3876:12;;;;3789;;3756:142;;;-1:-1:-1;3916:6:1;3204:724;-1:-1:-1;;;;;;3204:724:1:o;3933:468::-;3997:5;4031:18;4023:6;4020:30;4017:56;;;4053:18;;:::i;:::-;4102:2;4096:9;4114:69;4171:2;4150:15;;-1:-1:-1;;4146:29:1;4177:4;4142:40;4096:9;4114:69;:::i;:::-;4201:6;4192:15;;4231:6;4223;4216:22;4271:3;4262:6;4257:3;4253:16;4250:25;4247:45;;;4288:1;4285;4278:12;4247:45;4338:6;4333:3;4326:4;4318:6;4314:17;4301:44;4393:1;4386:4;4377:6;4369;4365:19;4361:30;4354:41;;3933:468;;;;;:::o;4406:220::-;4448:5;4501:3;4494:4;4486:6;4482:17;4478:27;4468:55;;4519:1;4516;4509:12;4468:55;4541:79;4616:3;4607:6;4594:20;4587:4;4579:6;4575:17;4541:79;:::i;4631:943::-;4785:6;4793;4801;4809;4817;4870:3;4858:9;4849:7;4845:23;4841:33;4838:53;;;4887:1;4884;4877:12;4838:53;4910:29;4929:9;4910:29;:::i;:::-;4900:39;;4958:38;4992:2;4981:9;4977:18;4958:38;:::i;:::-;4948:48;;5047:2;5036:9;5032:18;5019:32;5070:18;5111:2;5103:6;5100:14;5097:34;;;5127:1;5124;5117:12;5097:34;5150:61;5203:7;5194:6;5183:9;5179:22;5150:61;:::i;:::-;5140:71;;5264:2;5253:9;5249:18;5236:32;5220:48;;5293:2;5283:8;5280:16;5277:36;;;5309:1;5306;5299:12;5277:36;5332:63;5387:7;5376:8;5365:9;5361:24;5332:63;:::i;:::-;5322:73;;5448:3;5437:9;5433:19;5420:33;5404:49;;5478:2;5468:8;5465:16;5462:36;;;5494:1;5491;5484:12;5462:36;;5517:51;5560:7;5549:8;5538:9;5534:24;5517:51;:::i;:::-;5507:61;;;4631:943;;;;;;;;:::o;5579:730::-;5633:5;5686:3;5679:4;5671:6;5667:17;5663:27;5653:55;;5704:1;5701;5694:12;5653:55;5740:6;5727:20;5766:4;5789:43;5829:2;5789:43;:::i;:::-;5861:2;5855:9;5873:31;5901:2;5893:6;5873:31;:::i;:::-;5939:18;;;6031:1;6027:10;;;;6015:23;;6011:32;;;5973:15;;;;-1:-1:-1;6055:15:1;;;6052:35;;;6083:1;6080;6073:12;6052:35;6119:2;6111:6;6107:15;6131:148;6147:6;6142:3;6139:15;6131:148;;;6213:23;6232:3;6213:23;:::i;:::-;6201:36;;6257:12;;;;6164;;6131:148;;6314:595;6432:6;6440;6493:2;6481:9;6472:7;6468:23;6464:32;6461:52;;;6509:1;6506;6499:12;6461:52;6549:9;6536:23;6578:18;6619:2;6611:6;6608:14;6605:34;;;6635:1;6632;6625:12;6605:34;6658:61;6711:7;6702:6;6691:9;6687:22;6658:61;:::i;:::-;6648:71;;6772:2;6761:9;6757:18;6744:32;6728:48;;6801:2;6791:8;6788:16;6785:36;;;6817:1;6814;6807:12;6785:36;;6840:63;6895:7;6884:8;6873:9;6869:24;6840:63;:::i;:::-;6830:73;;;6314:595;;;;;:::o;6914:435::-;6967:3;7005:5;6999:12;7032:6;7027:3;7020:19;7058:4;7087:2;7082:3;7078:12;7071:19;;7124:2;7117:5;7113:14;7145:1;7155:169;7169:6;7166:1;7163:13;7155:169;;;7230:13;;7218:26;;7264:12;;;;7299:15;;;;7191:1;7184:9;7155:169;;;-1:-1:-1;7340:3:1;;6914:435;-1:-1:-1;;;;;6914:435:1:o;7354:261::-;7533:2;7522:9;7515:21;7496:4;7553:56;7605:2;7594:9;7590:18;7582:6;7553:56;:::i;7620:347::-;7685:6;7693;7746:2;7734:9;7725:7;7721:23;7717:32;7714:52;;;7762:1;7759;7752:12;7714:52;7785:29;7804:9;7785:29;:::i;:::-;7775:39;;7864:2;7853:9;7849:18;7836:32;7911:5;7904:13;7897:21;7890:5;7887:32;7877:60;;7933:1;7930;7923:12;7877:60;7956:5;7946:15;;;7620:347;;;;;:::o;7972:484::-;8074:6;8082;8090;8143:2;8131:9;8122:7;8118:23;8114:32;8111:52;;;8159:1;8156;8149:12;8111:52;8199:9;8186:23;8232:18;8224:6;8221:30;8218:50;;;8264:1;8261;8254:12;8218:50;8287:61;8340:7;8331:6;8320:9;8316:22;8287:61;:::i;:::-;8277:71;8395:2;8380:18;;8367:32;;-1:-1:-1;8446:2:1;8431:18;;;8418:32;;7972:484;-1:-1:-1;;;;7972:484:1:o;8461:186::-;8520:6;8573:2;8561:9;8552:7;8548:23;8544:32;8541:52;;;8589:1;8586;8579:12;8541:52;8612:29;8631:9;8612:29;:::i;8652:450::-;8721:6;8774:2;8762:9;8753:7;8749:23;8745:32;8742:52;;;8790:1;8787;8780:12;8742:52;8830:9;8817:23;8863:18;8855:6;8852:30;8849:50;;;8895:1;8892;8885:12;8849:50;8918:22;;8971:4;8963:13;;8959:27;-1:-1:-1;8949:55:1;;9000:1;8997;8990:12;8949:55;9023:73;9088:7;9083:2;9070:16;9065:2;9061;9057:11;9023:73;:::i;9107:260::-;9175:6;9183;9236:2;9224:9;9215:7;9211:23;9207:32;9204:52;;;9252:1;9249;9242:12;9204:52;9275:29;9294:9;9275:29;:::i;:::-;9265:39;;9323:38;9357:2;9346:9;9342:18;9323:38;:::i;:::-;9313:48;;9107:260;;;;;:::o;9372:606::-;9476:6;9484;9492;9500;9508;9561:3;9549:9;9540:7;9536:23;9532:33;9529:53;;;9578:1;9575;9568:12;9529:53;9601:29;9620:9;9601:29;:::i;:::-;9591:39;;9649:38;9683:2;9672:9;9668:18;9649:38;:::i;:::-;9639:48;;9734:2;9723:9;9719:18;9706:32;9696:42;;9785:2;9774:9;9770:18;9757:32;9747:42;;9840:3;9829:9;9825:19;9812:33;9868:18;9860:6;9857:30;9854:50;;;9900:1;9897;9890:12;9854:50;9923:49;9964:7;9955:6;9944:9;9940:22;9923:49;:::i;10395:380::-;10474:1;10470:12;;;;10517;;;10538:61;;10592:4;10584:6;10580:17;10570:27;;10538:61;10645:2;10637:6;10634:14;10614:18;10611:38;10608:161;;;10691:10;10686:3;10682:20;10679:1;10672:31;10726:4;10723:1;10716:15;10754:4;10751:1;10744:15;10608:161;;10395:380;;;:::o;10906:185::-;10948:3;10986:5;10980:12;11001:52;11046:6;11041:3;11034:4;11027:5;11023:16;11001:52;:::i;:::-;11069:16;;;;;10906:185;-1:-1:-1;;10906:185:1:o;11096:1174::-;11272:3;11301:1;11334:6;11328:13;11364:3;11386:1;11414:9;11410:2;11406:18;11396:28;;11474:2;11463:9;11459:18;11496;11486:61;;11540:4;11532:6;11528:17;11518:27;;11486:61;11566:2;11614;11606:6;11603:14;11583:18;11580:38;11577:165;;;-1:-1:-1;;;11641:33:1;;11697:4;11694:1;11687:15;11727:4;11648:3;11715:17;11577:165;11758:18;11785:104;;;;11903:1;11898:320;;;;11751:467;;11785:104;-1:-1:-1;;11818:24:1;;11806:37;;11863:16;;;;-1:-1:-1;11785:104:1;;11898:320;10853:1;10846:14;;;10890:4;10877:18;;11993:1;12007:165;12021:6;12018:1;12015:13;12007:165;;;12099:14;;12086:11;;;12079:35;12142:16;;;;12036:10;;12007:165;;;12011:3;;12201:6;12196:3;12192:16;12185:23;;11751:467;;;;;;;12234:30;12260:3;12252:6;12234:30;:::i;:::-;12227:37;11096:1174;-1:-1:-1;;;;;11096:1174:1:o;12275:356::-;12477:2;12459:21;;;12496:18;;;12489:30;12555:34;12550:2;12535:18;;12528:62;12622:2;12607:18;;12275:356::o;13810:127::-;13871:10;13866:3;13862:20;13859:1;13852:31;13902:4;13899:1;13892:15;13926:4;13923:1;13916:15;13942:127;14003:10;13998:3;13994:20;13991:1;13984:31;14034:4;14031:1;14024:15;14058:4;14055:1;14048:15;14074:135;14113:3;-1:-1:-1;;14134:17:1;;14131:43;;;14154:18;;:::i;:::-;-1:-1:-1;14201:1:1;14190:13;;14074:135::o;15320:127::-;15381:10;15376:3;15372:20;15369:1;15362:31;15412:4;15409:1;15402:15;15436:4;15433:1;15426:15;15452:120;15492:1;15518;15508:35;;15523:18;;:::i;:::-;-1:-1:-1;15557:9:1;;15452:120::o;15577:125::-;15617:4;15645:1;15642;15639:8;15636:34;;;15650:18;;:::i;:::-;-1:-1:-1;15687:9:1;;15577:125::o;15707:112::-;15739:1;15765;15755:35;;15770:18;;:::i;:::-;-1:-1:-1;15804:9:1;;15707:112::o;15824:128::-;15864:3;15895:1;15891:6;15888:1;15885:13;15882:39;;;15901:18;;:::i;:::-;-1:-1:-1;15937:9:1;;15824:128::o;17021:401::-;17223:2;17205:21;;;17262:2;17242:18;;;17235:30;17301:34;17296:2;17281:18;;17274:62;-1:-1:-1;;;17367:2:1;17352:18;;17345:35;17412:3;17397:19;;17021:401::o;17427:406::-;17629:2;17611:21;;;17668:2;17648:18;;;17641:30;17707:34;17702:2;17687:18;;17680:62;-1:-1:-1;;;17773:2:1;17758:18;;17751:40;17823:3;17808:19;;17427:406::o;17838:465::-;18095:2;18084:9;18077:21;18058:4;18121:56;18173:2;18162:9;18158:18;18150:6;18121:56;:::i;:::-;18225:9;18217:6;18213:22;18208:2;18197:9;18193:18;18186:50;18253:44;18290:6;18282;18253:44;:::i;19527:572::-;-1:-1:-1;;;;;19824:15:1;;;19806:34;;19876:15;;19871:2;19856:18;;19849:43;19923:2;19908:18;;19901:34;;;19966:2;19951:18;;19944:34;;;19786:3;20009;19994:19;;19987:32;;;19749:4;;20036:57;;20073:19;;20065:6;20036:57;:::i;:::-;20028:65;19527:572;-1:-1:-1;;;;;;;19527:572:1:o;20104:249::-;20173:6;20226:2;20214:9;20205:7;20201:23;20197:32;20194:52;;;20242:1;20239;20232:12;20194:52;20274:9;20268:16;20293:30;20317:5;20293:30;:::i;20358:179::-;20393:3;20435:1;20417:16;20414:23;20411:120;;;20481:1;20478;20475;20460:23;-1:-1:-1;20518:1:1;20512:8;20507:3;20503:18;20411:120;20358:179;:::o;20542:671::-;20581:3;20623:4;20605:16;20602:26;20599:39;;;20542:671;:::o;20599:39::-;20665:2;20659:9;-1:-1:-1;;20730:16:1;20726:25;;20723:1;20659:9;20702:50;20781:4;20775:11;20805:16;20840:18;20911:2;20904:4;20896:6;20892:17;20889:25;20884:2;20876:6;20873:14;20870:45;20867:58;;;20918:5;;;;;20542:671;:::o;20867:58::-;20955:6;20949:4;20945:17;20934:28;;20991:3;20985:10;21018:2;21010:6;21007:14;21004:27;;;21024:5;;;;;;20542:671;:::o;21004:27::-;21108:2;21089:16;21083:4;21079:27;21075:36;21068:4;21059:6;21054:3;21050:16;21046:27;21043:69;21040:82;;;21115:5;;;;;;20542:671;:::o;21040:82::-;21131:57;21182:4;21173:6;21165;21161:19;21157:30;21151:4;21131:57;:::i;:::-;-1:-1:-1;21204:3:1;;20542:671;-1:-1:-1;;;;;20542:671:1:o;21639:404::-;21841:2;21823:21;;;21880:2;21860:18;;;21853:30;21919:34;21914:2;21899:18;;21892:62;-1:-1:-1;;;21985:2:1;21970:18;;21963:38;22033:3;22018:19;;21639:404::o;22048:838::-;-1:-1:-1;;;;;22445:15:1;;;22427:34;;22497:15;;22492:2;22477:18;;22470:43;22407:3;22544:2;22529:18;;22522:31;;;22370:4;;22576:57;;22613:19;;22605:6;22576:57;:::i;:::-;22681:9;22673:6;22669:22;22664:2;22653:9;22649:18;22642:50;22715:44;22752:6;22744;22715:44;:::i;:::-;22701:58;;22808:9;22800:6;22796:22;22790:3;22779:9;22775:19;22768:51;22836:44;22873:6;22865;22836:44;:::i;:::-;22828:52;22048:838;-1:-1:-1;;;;;;;;22048:838:1:o

Swarm Source

ipfs://34a2da69c0d56ada665c9854f132dae0a2a650e4403e79207c0d3d2f25ef97dc
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.