ETH Price: $3,333.45 (+2.84%)
 

Overview

Max Total Supply

116 REBIRTH

Holders

56

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x55951200dcfbe2b4971c3cf9c8e0a06c7c808b6c
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:
REBIRTH

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-21
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.4;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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: @openzeppelin/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: @openzeppelin/contracts/utils/introspection/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: @openzeppelin/contracts/utils/introspection/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: @openzeppelin/contracts/token/ERC1155/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: @openzeppelin/contracts/token/ERC1155/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: @openzeppelin/contracts/token/ERC1155/extensions/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: @openzeppelin/contracts/token/ERC1155/ERC1155.sol

/**
 * @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() {
        
    }

    /**
     * @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 {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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 `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][account] += amount;
        emit TransferSingle(operator, address(0), account, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), account, 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 `account`
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 accountBalance = _balances[id][account];
        require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][account] = accountBalance - amount;
        }

        emit TransferSingle(operator, account, 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 account,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 accountBalance = _balances[id][account];
            require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][account] = accountBalance - amount;
            }
        }

        emit TransferBatch(operator, account, address(0), ids, amounts);
    }

    /**
     * @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;
    }
}

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
contract REBIRTH is ERC1155, Ownable {
    string public constant name = "ReBirth Phenix NFT";
    string public constant symbol = "REBIRTH";
    
    using SafeMath for uint256;
    using Strings for uint256;
    uint256 public totalSupply = 0;
    string private baseURI;
    string private blindURI;
    uint256 public constant BUY_LIMIT_PER_TX = 10;
    uint256 public constant MAX_NFT_PUBLIC = 5455;
    uint256 private constant MAX_NFT = 5555;
    uint256 public constant maxGiveaway=100;
    uint256 public NFTPrice = 150000000000000000;  // 0.15 ETH
    bool public reveal;
    bool public isActive;
    uint256 public giveawayCount;
    /*
     * Function to reveal all NFTs
    */
    function revealNow() 
        external 
        onlyOwner 
    {
        reveal = true;
    }
    
    /*
     * Function to mint NFTs
    */
    function mint(address to, uint32 count) internal {
        if (count > 1) {
            uint256[] memory ids = new uint256[](uint256(count));
            uint256[] memory amounts = new uint256[](uint256(count));

            for (uint32 i = 0; i < count; i++) {
                ids[i] = totalSupply + i;
                amounts[i] = 1;
            }

            _mintBatch(to, ids, amounts, "");
        } else {
            _mint(to, totalSupply, 1, "");
        }

        totalSupply += count;
    }
    
    /*
     * Function setIsActive to activate/desactivate the smart contract
    */
    function setIsActive(
        bool _isActive
    ) 
        external 
        onlyOwner 
    {
        isActive = _isActive;
    }
    
    /*
     * Function to setPrice to lower for auction, can only lower the price than 0.19 ETH
    */
    function setPrice(
        uint256 price
    ) 
        external 
        onlyOwner 
    {
        require(190000000000000000>=price,"cannot higher the price, for safety");
            NFTPrice=price;  
    }
    
    /*
     * Function to set Base and Blind URI 
    */
    function setURIs(   
        string memory _blindURI, 
        string memory _URI
    ) 
        external 
        onlyOwner 
    {
        blindURI = _blindURI;
        baseURI = _URI;
    }
    
    /*
     * Function to withdraw contract ETH
    */
    function withdraw(
    ) 
        public 
        onlyOwner 
    {
        uint balance = address(this).balance;
        require(balance > 0, "Balance should be more then zero");
        payable(owner()).transfer(balance);
    }
    
    /*
     * Function to mint new NFTs during the public sale
     * It is payable. Amount is calculated as per (NFTPrice.mul(_numOfTokens))
    */
    function mintNFT(
        uint32 _numOfTokens
    ) 
        public 
        payable 
    {
    
        require(isActive, 'Contract is not active');
        require(_numOfTokens <= BUY_LIMIT_PER_TX, "Cannot mint above limit");
        require(totalSupply.add(_numOfTokens).sub(giveawayCount) <= MAX_NFT_PUBLIC, "Purchase would exceed max public supply of NFTs");
        require( msg.value >= NFTPrice.mul(_numOfTokens), "Ether value sent is not correct");
        mint(msg.sender,_numOfTokens);
    }
    
    
    /*
     * Function to mint all NFTs for giveaway and partnerships
    */
    function mintByOwner(
        address _to
    ) 
        public 
        onlyOwner
    {
        require(totalSupply.add(1) < MAX_NFT, "Tokens number to mint cannot exceed number of MAX tokens");
        mint(_to,1);
    }

    
    /*
     * Function to mint all NFTs for giveaway and partnerships
    */
    function mintMultipleByOwner(
        address[] memory _to
    ) 
        public 
        onlyOwner
    {
        require(totalSupply.add(_to.length) < MAX_NFT, "Tokens number to mint cannot exceed number of MAX tokens");
        require(giveawayCount.add(_to.length)<=maxGiveaway,"Cannot do that much giveaway");
        for(uint256 i = 0; i < _to.length; i++){
            mint(_to[i],1);
        }
        giveawayCount=giveawayCount.add(_to.length);
    }
    
    /*
     * Function to get token URI of given token ID
     * URI will be blank untill totalSupply reaches MAX_NFT_PUBLIC
    */
    function uri(
        uint256 _tokenId
    ) 
        public 
        view 
        virtual 
        override 
        returns (string memory) 
    {
        require(_tokenId<totalSupply, "ERC1155Metadata: URI query for nonexistent token");
        if (!reveal) {
            return string(abi.encodePacked(blindURI));
        } else {
            return string(abi.encodePacked(baseURI, _tokenId.toString()));
        }
    }
    
}

Contract Security Audit

Contract ABI

[{"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":"BUY_LIMIT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_NFT_PUBLIC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFTPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"giveawayCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"maxGiveaway","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mintByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"mintMultipleByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_numOfTokens","type":"uint32"}],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealNow","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":"bool","name":"_isActive","type":"bool"}],"name":"setIsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_blindURI","type":"string"},{"internalType":"string","name":"_URI","type":"string"}],"name":"setURIs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600455670214e8348c4f000060075534801561002157600080fd5b5061002b33610030565b610082565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612794806100916000396000f3fe6080604052600436106101c15760003560e01c8063715018a6116100f7578063b533731d11610095578063e985e9c511610064578063e985e9c5146104f5578063e9be0f3f1461053e578063f242432a14610554578063f2fde38b1461057457600080fd5b8063b533731d1461048a578063d1d80f30146104aa578063e748e07c146104c0578063e8254174146104d557600080fd5b806395d89b41116100d157806395d89b4114610407578063a22cb4651461043a578063a38bffda1461045a578063a475b5dd1461047057600080fd5b8063715018a6146103aa5780638da5cb5b146103bf57806391b7f5ed146103e757600080fd5b80632eb2c2d611610164578063459ba3ae1161013e578063459ba3ae146103335780634cdb4400146103485780634e1273f4146103685780635f0f45b21461039557600080fd5b80632eb2c2d6146102eb5780633ccfd60b1461030b57806341de0e521461032057600080fd5b80630e89341c116101a05780630e89341c1461027457806318160ddd1461029457806322f3e2d4146102aa5780632750fc78146102c957600080fd5b8062fdd58e146101c657806301ffc9a7146101f957806306fdde0314610229575b600080fd5b3480156101d257600080fd5b506101e66101e1366004611f3f565b610594565b6040519081526020015b60405180910390f35b34801561020557600080fd5b50610219610214366004612014565b61062b565b60405190151581526020016101f0565b34801561023557600080fd5b50610267604051806040016040528060128152602001711499509a5c9d1a08141a195b9a5e0813919560721b81525081565b6040516101f091906122f1565b34801561028057600080fd5b5061026761028f3660046120a2565b61067d565b3480156102a057600080fd5b506101e660045481565b3480156102b657600080fd5b5060085461021990610100900460ff1681565b3480156102d557600080fd5b506102e96102e4366004611ffa565b61073c565b005b3480156102f757600080fd5b506102e9610306366004611e0f565b610780565b34801561031757600080fd5b506102e9610817565b6102e961032e3660046120ba565b6108cd565b34801561033f57600080fd5b506101e6606481565b34801561035457600080fd5b506102e9610363366004611f68565b610a76565b34801561037457600080fd5b50610388610383366004611f9a565b610ba1565b6040516101f091906122b0565b3480156103a157600080fd5b506102e9610d02565b3480156103b657600080fd5b506102e9610d3b565b3480156103cb57600080fd5b506003546040516001600160a01b0390911681526020016101f0565b3480156103f357600080fd5b506102e96104023660046120a2565b610d71565b34801561041357600080fd5b50610267604051806040016040528060078152602001660a48a8492a4a8960cb1b81525081565b34801561044657600080fd5b506102e9610455366004611f16565b610e04565b34801561046657600080fd5b506101e660075481565b34801561047c57600080fd5b506008546102199060ff1681565b34801561049657600080fd5b506102e96104a5366004611dc3565b610edb565b3480156104b657600080fd5b506101e661154f81565b3480156104cc57600080fd5b506101e6600a81565b3480156104e157600080fd5b506102e96104f036600461204c565b610f3f565b34801561050157600080fd5b50610219610510366004611ddd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561054a57600080fd5b506101e660095481565b34801561056057600080fd5b506102e961056f366004611eb4565b610f95565b34801561058057600080fd5b506102e961058f366004611dc3565b61101c565b60006001600160a01b0383166106055760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061065c57506001600160e01b031982166303a24d0760e21b145b8061067757506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060045482106106e95760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b60648201526084016105fc565b60085460ff1661071b57600660405160200161070591906121dc565b6040516020818303038152906040529050919050565b6005610726836110b4565b6040516020016107059291906121e8565b919050565b6003546001600160a01b031633146107665760405162461bcd60e51b81526004016105fc90612438565b600880549115156101000261ff0019909216919091179055565b6001600160a01b03851633148061079c575061079c8533610510565b6108035760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016105fc565b61081085858585856111d5565b5050505050565b6003546001600160a01b031633146108415760405162461bcd60e51b81526004016105fc90612438565b478061088f5760405162461bcd60e51b815260206004820181905260248201527f42616c616e63652073686f756c64206265206d6f7265207468656e207a65726f60448201526064016105fc565b6003546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156108c9573d6000803e3d6000fd5b5050565b600854610100900460ff1661091d5760405162461bcd60e51b8152602060048201526016602482015275436f6e7472616374206973206e6f742061637469766560501b60448201526064016105fc565b600a8163ffffffff1611156109745760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206d696e742061626f7665206c696d697400000000000000000060448201526064016105fc565b61154f61099e6009546109988463ffffffff1660045461138d90919063ffffffff16565b906113a0565b1115610a045760405162461bcd60e51b815260206004820152602f60248201527f507572636861736520776f756c6420657863656564206d6178207075626c696360448201526e20737570706c79206f66204e46547360881b60648201526084016105fc565b600754610a1a9063ffffffff808416906113ac16565b341015610a695760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016105fc565b610a7333826113b8565b50565b6003546001600160a01b03163314610aa05760405162461bcd60e51b81526004016105fc90612438565b6115b3610ab9825160045461138d90919063ffffffff16565b10610ad65760405162461bcd60e51b81526004016105fc90612391565b6064610aee825160095461138d90919063ffffffff16565b1115610b3c5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f7420646f2074686174206d7563682067697665617761790000000060448201526064016105fc565b60005b8151811015610b8c57610b7a828281518110610b6b57634e487b7160e01b600052603260045260246000fd5b602002602001015160016113b8565b80610b8481612612565b915050610b3f565b508051600954610b9b9161138d565b60095550565b60608151835114610c065760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016105fc565b600083516001600160401b03811115610c2f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610c58578160200160208202803683370190505b50905060005b8451811015610cfa57610cbf858281518110610c8a57634e487b7160e01b600052603260045260246000fd5b6020026020010151858381518110610cb257634e487b7160e01b600052603260045260246000fd5b6020026020010151610594565b828281518110610cdf57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152610cf381612612565b9050610c5e565b509392505050565b6003546001600160a01b03163314610d2c5760405162461bcd60e51b81526004016105fc90612438565b6008805460ff19166001179055565b6003546001600160a01b03163314610d655760405162461bcd60e51b81526004016105fc90612438565b610d6f600061157f565b565b6003546001600160a01b03163314610d9b5760405162461bcd60e51b81526004016105fc90612438565b806702a303fe4b5300001015610dff5760405162461bcd60e51b815260206004820152602360248201527f63616e6e6f7420686967686572207468652070726963652c20666f722073616660448201526265747960e81b60648201526084016105fc565b600755565b336001600160a01b0383161415610e6f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016105fc565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6003546001600160a01b03163314610f055760405162461bcd60e51b81526004016105fc90612438565b6004546115b390610f1790600161138d565b10610f345760405162461bcd60e51b81526004016105fc90612391565b610a738160016113b8565b6003546001600160a01b03163314610f695760405162461bcd60e51b81526004016105fc90612438565b8151610f7c906006906020850190611bb3565b508051610f90906005906020840190611bb3565b505050565b6001600160a01b038516331480610fb15750610fb18533610510565b61100f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016105fc565b61081085858585856115d1565b6003546001600160a01b031633146110465760405162461bcd60e51b81526004016105fc90612438565b6001600160a01b0381166110ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105fc565b610a738161157f565b6060816110d85750506040805180820190915260018152600360fc1b602082015290565b8160005b811561110257806110ec81612612565b91506110fb9050600a83612531565b91506110dc565b6000816001600160401b0381111561112a57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611154576020820181803683370190505b5090505b84156111cd57611169600183612564565b9150611176600a86612651565b611181906030612519565b60f81b8183815181106111a457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506111c6600a86612531565b9450611158565b949350505050565b81518351146111f65760405162461bcd60e51b81526004016105fc9061246d565b6001600160a01b03841661121c5760405162461bcd60e51b81526004016105fc9061234c565b3360005b845181101561131f57600085828151811061124b57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600085838151811061127757634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156112c75760405162461bcd60e51b81526004016105fc906123ee565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290611304908490612519565b925050819055505050508061131890612612565b9050611220565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161136f9291906122c3565b60405180910390a46113858187878787876116f7565b505050505050565b60006113998284612519565b9392505050565b60006113998284612564565b60006113998284612545565b60018163ffffffff1611156115405760008163ffffffff166001600160401b038111156113f557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561141e578160200160208202803683370190505b50905060008263ffffffff166001600160401b0381111561144f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611478578160200160208202803683370190505b50905060005b8363ffffffff168163ffffffff16101561151d578063ffffffff166004546114a69190612519565b838263ffffffff16815181106114cc57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250506001828263ffffffff168151811061150057634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806115158161262d565b91505061147e565b5061153984838360405180602001604052806000815250611862565b505061155e565b61155e826004546001604051806020016040528060008152506119c9565b8063ffffffff16600460008282546115769190612519565b90915550505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0384166115f75760405162461bcd60e51b81526004016105fc9061234c565b3361161081878761160788611a90565b61081088611a90565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156116515760405162461bcd60e51b81526004016105fc906123ee565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061168e908490612519565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46116ee828888888888611ae9565b50505050505050565b6001600160a01b0384163b156113855760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061173b908990899088908890889060040161220d565b602060405180830381600087803b15801561175557600080fd5b505af1925050508015611785575060408051601f3d908101601f1916820190925261178291810190612030565b60015b611832576117916126a7565b806308c379a014156117cb57506117a66126bf565b806117b157506117cd565b8060405162461bcd60e51b81526004016105fc91906122f1565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016105fc565b6001600160e01b0319811663bc197c8160e01b146116ee5760405162461bcd60e51b81526004016105fc90612304565b6001600160a01b0384166118885760405162461bcd60e51b81526004016105fc906124b5565b81518351146118a95760405162461bcd60e51b81526004016105fc9061246d565b3360005b8451811015611961578381815181106118d657634e487b7160e01b600052603260045260246000fd5b602002602001015160008087848151811061190157634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546119499190612519565b9091555081905061195981612612565b9150506118ad565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516119b29291906122c3565b60405180910390a4610810816000878787876116f7565b6001600160a01b0384166119ef5760405162461bcd60e51b81526004016105fc906124b5565b33611a008160008761160788611a90565b6000848152602081815260408083206001600160a01b038916845290915281208054859290611a30908490612519565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461081081600087878787611ae9565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611ad857634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156113855760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611b2d908990899088908890889060040161226b565b602060405180830381600087803b158015611b4757600080fd5b505af1925050508015611b77575060408051601f3d908101601f19168201909252611b7491810190612030565b60015b611b83576117916126a7565b6001600160e01b0319811663f23a6e6160e01b146116ee5760405162461bcd60e51b81526004016105fc90612304565b828054611bbf906125ab565b90600052602060002090601f016020900481019282611be15760008555611c27565b82601f10611bfa57805160ff1916838001178555611c27565b82800160010185558215611c27579182015b82811115611c27578251825591602001919060010190611c0c565b50611c33929150611c37565b5090565b5b80821115611c335760008155600101611c38565b80356001600160a01b038116811461073757600080fd5b600082601f830112611c73578081fd5b81356020611c80826124f6565b604051611c8d82826125e6565b8381528281019150858301600585901b87018401881015611cac578586fd5b855b85811015611cd157611cbf82611c4c565b84529284019290840190600101611cae565b5090979650505050505050565b600082601f830112611cee578081fd5b81356020611cfb826124f6565b604051611d0882826125e6565b8381528281019150858301600585901b87018401881015611d27578586fd5b855b85811015611cd157813584529284019290840190600101611d29565b8035801515811461073757600080fd5b600082601f830112611d65578081fd5b81356001600160401b03811115611d7e57611d7e612691565b604051611d95601f8301601f1916602001826125e6565b818152846020838601011115611da9578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611dd4578081fd5b61139982611c4c565b60008060408385031215611def578081fd5b611df883611c4c565b9150611e0660208401611c4c565b90509250929050565b600080600080600060a08688031215611e26578081fd5b611e2f86611c4c565b9450611e3d60208701611c4c565b935060408601356001600160401b0380821115611e58578283fd5b611e6489838a01611cde565b94506060880135915080821115611e79578283fd5b611e8589838a01611cde565b93506080880135915080821115611e9a578283fd5b50611ea788828901611d55565b9150509295509295909350565b600080600080600060a08688031215611ecb578081fd5b611ed486611c4c565b9450611ee260208701611c4c565b9350604086013592506060860135915060808601356001600160401b03811115611f0a578182fd5b611ea788828901611d55565b60008060408385031215611f28578182fd5b611f3183611c4c565b9150611e0660208401611d45565b60008060408385031215611f51578182fd5b611f5a83611c4c565b946020939093013593505050565b600060208284031215611f79578081fd5b81356001600160401b03811115611f8e578182fd5b6111cd84828501611c63565b60008060408385031215611fac578182fd5b82356001600160401b0380821115611fc2578384fd5b611fce86838701611c63565b93506020850135915080821115611fe3578283fd5b50611ff085828601611cde565b9150509250929050565b60006020828403121561200b578081fd5b61139982611d45565b600060208284031215612025578081fd5b813561139981612748565b600060208284031215612041578081fd5b815161139981612748565b6000806040838503121561205e578182fd5b82356001600160401b0380821115612074578384fd5b61208086838701611d55565b93506020850135915080821115612095578283fd5b50611ff085828601611d55565b6000602082840312156120b3578081fd5b5035919050565b6000602082840312156120cb578081fd5b813563ffffffff81168114611399578182fd5b6000815180845260208085019450808401835b8381101561210d578151875295820195908201906001016120f1565b509495945050505050565b6000815180845261213081602086016020860161257b565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061215e57607f831692505b602080841082141561217e57634e487b7160e01b86526022600452602486fd5b81801561219257600181146121a3576121d0565b60ff198616895284890196506121d0565b60008881526020902060005b868110156121c85781548b8201529085019083016121af565b505084890196505b50505050505092915050565b60006113998284612144565b60006121f48285612144565b835161220481836020880161257b565b01949350505050565b6001600160a01b0386811682528516602082015260a060408201819052600090612239908301866120de565b828103606084015261224b81866120de565b9050828103608084015261225f8185612118565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906122a590830184612118565b979650505050505050565b60208152600061139960208301846120de565b6040815260006122d660408301856120de565b82810360208401526122e881856120de565b95945050505050565b6020815260006113996020830184612118565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526038908201527f546f6b656e73206e756d62657220746f206d696e742063616e6e6f742065786360408201527f656564206e756d626572206f66204d415820746f6b656e730000000000000000606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60006001600160401b0382111561250f5761250f612691565b5060051b60200190565b6000821982111561252c5761252c612665565b500190565b6000826125405761254061267b565b500490565b600081600019048311821515161561255f5761255f612665565b500290565b60008282101561257657612576612665565b500390565b60005b8381101561259657818101518382015260200161257e565b838111156125a5576000848401525b50505050565b600181811c908216806125bf57607f821691505b602082108114156125e057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b038111828210171561260b5761260b612691565b6040525050565b600060001982141561262657612626612665565b5060010190565b600063ffffffff8083168181141561264757612647612665565b6001019392505050565b6000826126605761266061267b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156126bc57600481823e5160e01c5b90565b600060443d10156126cd5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156126fc57505050505090565b82850191508151818111156127145750505050505090565b843d870101602082850101111561272e5750505050505090565b61273d602082860101876125e6565b509095945050505050565b6001600160e01b031981168114610a7357600080fdfea2646970667358221220af79a5e6f53792d9258ee897878eda9246f66997cde8d0cd1c90c942164b785864736f6c63430008040033

Deployed Bytecode

0x6080604052600436106101c15760003560e01c8063715018a6116100f7578063b533731d11610095578063e985e9c511610064578063e985e9c5146104f5578063e9be0f3f1461053e578063f242432a14610554578063f2fde38b1461057457600080fd5b8063b533731d1461048a578063d1d80f30146104aa578063e748e07c146104c0578063e8254174146104d557600080fd5b806395d89b41116100d157806395d89b4114610407578063a22cb4651461043a578063a38bffda1461045a578063a475b5dd1461047057600080fd5b8063715018a6146103aa5780638da5cb5b146103bf57806391b7f5ed146103e757600080fd5b80632eb2c2d611610164578063459ba3ae1161013e578063459ba3ae146103335780634cdb4400146103485780634e1273f4146103685780635f0f45b21461039557600080fd5b80632eb2c2d6146102eb5780633ccfd60b1461030b57806341de0e521461032057600080fd5b80630e89341c116101a05780630e89341c1461027457806318160ddd1461029457806322f3e2d4146102aa5780632750fc78146102c957600080fd5b8062fdd58e146101c657806301ffc9a7146101f957806306fdde0314610229575b600080fd5b3480156101d257600080fd5b506101e66101e1366004611f3f565b610594565b6040519081526020015b60405180910390f35b34801561020557600080fd5b50610219610214366004612014565b61062b565b60405190151581526020016101f0565b34801561023557600080fd5b50610267604051806040016040528060128152602001711499509a5c9d1a08141a195b9a5e0813919560721b81525081565b6040516101f091906122f1565b34801561028057600080fd5b5061026761028f3660046120a2565b61067d565b3480156102a057600080fd5b506101e660045481565b3480156102b657600080fd5b5060085461021990610100900460ff1681565b3480156102d557600080fd5b506102e96102e4366004611ffa565b61073c565b005b3480156102f757600080fd5b506102e9610306366004611e0f565b610780565b34801561031757600080fd5b506102e9610817565b6102e961032e3660046120ba565b6108cd565b34801561033f57600080fd5b506101e6606481565b34801561035457600080fd5b506102e9610363366004611f68565b610a76565b34801561037457600080fd5b50610388610383366004611f9a565b610ba1565b6040516101f091906122b0565b3480156103a157600080fd5b506102e9610d02565b3480156103b657600080fd5b506102e9610d3b565b3480156103cb57600080fd5b506003546040516001600160a01b0390911681526020016101f0565b3480156103f357600080fd5b506102e96104023660046120a2565b610d71565b34801561041357600080fd5b50610267604051806040016040528060078152602001660a48a8492a4a8960cb1b81525081565b34801561044657600080fd5b506102e9610455366004611f16565b610e04565b34801561046657600080fd5b506101e660075481565b34801561047c57600080fd5b506008546102199060ff1681565b34801561049657600080fd5b506102e96104a5366004611dc3565b610edb565b3480156104b657600080fd5b506101e661154f81565b3480156104cc57600080fd5b506101e6600a81565b3480156104e157600080fd5b506102e96104f036600461204c565b610f3f565b34801561050157600080fd5b50610219610510366004611ddd565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561054a57600080fd5b506101e660095481565b34801561056057600080fd5b506102e961056f366004611eb4565b610f95565b34801561058057600080fd5b506102e961058f366004611dc3565b61101c565b60006001600160a01b0383166106055760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b506000908152602081815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b148061065c57506001600160e01b031982166303a24d0760e21b145b8061067757506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060045482106106e95760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b60648201526084016105fc565b60085460ff1661071b57600660405160200161070591906121dc565b6040516020818303038152906040529050919050565b6005610726836110b4565b6040516020016107059291906121e8565b919050565b6003546001600160a01b031633146107665760405162461bcd60e51b81526004016105fc90612438565b600880549115156101000261ff0019909216919091179055565b6001600160a01b03851633148061079c575061079c8533610510565b6108035760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016105fc565b61081085858585856111d5565b5050505050565b6003546001600160a01b031633146108415760405162461bcd60e51b81526004016105fc90612438565b478061088f5760405162461bcd60e51b815260206004820181905260248201527f42616c616e63652073686f756c64206265206d6f7265207468656e207a65726f60448201526064016105fc565b6003546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156108c9573d6000803e3d6000fd5b5050565b600854610100900460ff1661091d5760405162461bcd60e51b8152602060048201526016602482015275436f6e7472616374206973206e6f742061637469766560501b60448201526064016105fc565b600a8163ffffffff1611156109745760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206d696e742061626f7665206c696d697400000000000000000060448201526064016105fc565b61154f61099e6009546109988463ffffffff1660045461138d90919063ffffffff16565b906113a0565b1115610a045760405162461bcd60e51b815260206004820152602f60248201527f507572636861736520776f756c6420657863656564206d6178207075626c696360448201526e20737570706c79206f66204e46547360881b60648201526084016105fc565b600754610a1a9063ffffffff808416906113ac16565b341015610a695760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016105fc565b610a7333826113b8565b50565b6003546001600160a01b03163314610aa05760405162461bcd60e51b81526004016105fc90612438565b6115b3610ab9825160045461138d90919063ffffffff16565b10610ad65760405162461bcd60e51b81526004016105fc90612391565b6064610aee825160095461138d90919063ffffffff16565b1115610b3c5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f7420646f2074686174206d7563682067697665617761790000000060448201526064016105fc565b60005b8151811015610b8c57610b7a828281518110610b6b57634e487b7160e01b600052603260045260246000fd5b602002602001015160016113b8565b80610b8481612612565b915050610b3f565b508051600954610b9b9161138d565b60095550565b60608151835114610c065760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016105fc565b600083516001600160401b03811115610c2f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610c58578160200160208202803683370190505b50905060005b8451811015610cfa57610cbf858281518110610c8a57634e487b7160e01b600052603260045260246000fd5b6020026020010151858381518110610cb257634e487b7160e01b600052603260045260246000fd5b6020026020010151610594565b828281518110610cdf57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152610cf381612612565b9050610c5e565b509392505050565b6003546001600160a01b03163314610d2c5760405162461bcd60e51b81526004016105fc90612438565b6008805460ff19166001179055565b6003546001600160a01b03163314610d655760405162461bcd60e51b81526004016105fc90612438565b610d6f600061157f565b565b6003546001600160a01b03163314610d9b5760405162461bcd60e51b81526004016105fc90612438565b806702a303fe4b5300001015610dff5760405162461bcd60e51b815260206004820152602360248201527f63616e6e6f7420686967686572207468652070726963652c20666f722073616660448201526265747960e81b60648201526084016105fc565b600755565b336001600160a01b0383161415610e6f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016105fc565b3360008181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6003546001600160a01b03163314610f055760405162461bcd60e51b81526004016105fc90612438565b6004546115b390610f1790600161138d565b10610f345760405162461bcd60e51b81526004016105fc90612391565b610a738160016113b8565b6003546001600160a01b03163314610f695760405162461bcd60e51b81526004016105fc90612438565b8151610f7c906006906020850190611bb3565b508051610f90906005906020840190611bb3565b505050565b6001600160a01b038516331480610fb15750610fb18533610510565b61100f5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016105fc565b61081085858585856115d1565b6003546001600160a01b031633146110465760405162461bcd60e51b81526004016105fc90612438565b6001600160a01b0381166110ab5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016105fc565b610a738161157f565b6060816110d85750506040805180820190915260018152600360fc1b602082015290565b8160005b811561110257806110ec81612612565b91506110fb9050600a83612531565b91506110dc565b6000816001600160401b0381111561112a57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611154576020820181803683370190505b5090505b84156111cd57611169600183612564565b9150611176600a86612651565b611181906030612519565b60f81b8183815181106111a457634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a9053506111c6600a86612531565b9450611158565b949350505050565b81518351146111f65760405162461bcd60e51b81526004016105fc9061246d565b6001600160a01b03841661121c5760405162461bcd60e51b81526004016105fc9061234c565b3360005b845181101561131f57600085828151811061124b57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600085838151811061127757634e487b7160e01b600052603260045260246000fd5b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156112c75760405162461bcd60e51b81526004016105fc906123ee565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290611304908490612519565b925050819055505050508061131890612612565b9050611220565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161136f9291906122c3565b60405180910390a46113858187878787876116f7565b505050505050565b60006113998284612519565b9392505050565b60006113998284612564565b60006113998284612545565b60018163ffffffff1611156115405760008163ffffffff166001600160401b038111156113f557634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561141e578160200160208202803683370190505b50905060008263ffffffff166001600160401b0381111561144f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611478578160200160208202803683370190505b50905060005b8363ffffffff168163ffffffff16101561151d578063ffffffff166004546114a69190612519565b838263ffffffff16815181106114cc57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250506001828263ffffffff168151811061150057634e487b7160e01b600052603260045260246000fd5b6020908102919091010152806115158161262d565b91505061147e565b5061153984838360405180602001604052806000815250611862565b505061155e565b61155e826004546001604051806020016040528060008152506119c9565b8063ffffffff16600460008282546115769190612519565b90915550505050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0384166115f75760405162461bcd60e51b81526004016105fc9061234c565b3361161081878761160788611a90565b61081088611a90565b6000848152602081815260408083206001600160a01b038a168452909152902054838110156116515760405162461bcd60e51b81526004016105fc906123ee565b6000858152602081815260408083206001600160a01b038b811685529252808320878503905590881682528120805486929061168e908490612519565b909155505060408051868152602081018690526001600160a01b03808916928a821692918616917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46116ee828888888888611ae9565b50505050505050565b6001600160a01b0384163b156113855760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061173b908990899088908890889060040161220d565b602060405180830381600087803b15801561175557600080fd5b505af1925050508015611785575060408051601f3d908101601f1916820190925261178291810190612030565b60015b611832576117916126a7565b806308c379a014156117cb57506117a66126bf565b806117b157506117cd565b8060405162461bcd60e51b81526004016105fc91906122f1565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016105fc565b6001600160e01b0319811663bc197c8160e01b146116ee5760405162461bcd60e51b81526004016105fc90612304565b6001600160a01b0384166118885760405162461bcd60e51b81526004016105fc906124b5565b81518351146118a95760405162461bcd60e51b81526004016105fc9061246d565b3360005b8451811015611961578381815181106118d657634e487b7160e01b600052603260045260246000fd5b602002602001015160008087848151811061190157634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b0316815260200190815260200160002060008282546119499190612519565b9091555081905061195981612612565b9150506118ad565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516119b29291906122c3565b60405180910390a4610810816000878787876116f7565b6001600160a01b0384166119ef5760405162461bcd60e51b81526004016105fc906124b5565b33611a008160008761160788611a90565b6000848152602081815260408083206001600160a01b038916845290915281208054859290611a30908490612519565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461081081600087878787611ae9565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611ad857634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156113855760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190611b2d908990899088908890889060040161226b565b602060405180830381600087803b158015611b4757600080fd5b505af1925050508015611b77575060408051601f3d908101601f19168201909252611b7491810190612030565b60015b611b83576117916126a7565b6001600160e01b0319811663f23a6e6160e01b146116ee5760405162461bcd60e51b81526004016105fc90612304565b828054611bbf906125ab565b90600052602060002090601f016020900481019282611be15760008555611c27565b82601f10611bfa57805160ff1916838001178555611c27565b82800160010185558215611c27579182015b82811115611c27578251825591602001919060010190611c0c565b50611c33929150611c37565b5090565b5b80821115611c335760008155600101611c38565b80356001600160a01b038116811461073757600080fd5b600082601f830112611c73578081fd5b81356020611c80826124f6565b604051611c8d82826125e6565b8381528281019150858301600585901b87018401881015611cac578586fd5b855b85811015611cd157611cbf82611c4c565b84529284019290840190600101611cae565b5090979650505050505050565b600082601f830112611cee578081fd5b81356020611cfb826124f6565b604051611d0882826125e6565b8381528281019150858301600585901b87018401881015611d27578586fd5b855b85811015611cd157813584529284019290840190600101611d29565b8035801515811461073757600080fd5b600082601f830112611d65578081fd5b81356001600160401b03811115611d7e57611d7e612691565b604051611d95601f8301601f1916602001826125e6565b818152846020838601011115611da9578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611dd4578081fd5b61139982611c4c565b60008060408385031215611def578081fd5b611df883611c4c565b9150611e0660208401611c4c565b90509250929050565b600080600080600060a08688031215611e26578081fd5b611e2f86611c4c565b9450611e3d60208701611c4c565b935060408601356001600160401b0380821115611e58578283fd5b611e6489838a01611cde565b94506060880135915080821115611e79578283fd5b611e8589838a01611cde565b93506080880135915080821115611e9a578283fd5b50611ea788828901611d55565b9150509295509295909350565b600080600080600060a08688031215611ecb578081fd5b611ed486611c4c565b9450611ee260208701611c4c565b9350604086013592506060860135915060808601356001600160401b03811115611f0a578182fd5b611ea788828901611d55565b60008060408385031215611f28578182fd5b611f3183611c4c565b9150611e0660208401611d45565b60008060408385031215611f51578182fd5b611f5a83611c4c565b946020939093013593505050565b600060208284031215611f79578081fd5b81356001600160401b03811115611f8e578182fd5b6111cd84828501611c63565b60008060408385031215611fac578182fd5b82356001600160401b0380821115611fc2578384fd5b611fce86838701611c63565b93506020850135915080821115611fe3578283fd5b50611ff085828601611cde565b9150509250929050565b60006020828403121561200b578081fd5b61139982611d45565b600060208284031215612025578081fd5b813561139981612748565b600060208284031215612041578081fd5b815161139981612748565b6000806040838503121561205e578182fd5b82356001600160401b0380821115612074578384fd5b61208086838701611d55565b93506020850135915080821115612095578283fd5b50611ff085828601611d55565b6000602082840312156120b3578081fd5b5035919050565b6000602082840312156120cb578081fd5b813563ffffffff81168114611399578182fd5b6000815180845260208085019450808401835b8381101561210d578151875295820195908201906001016120f1565b509495945050505050565b6000815180845261213081602086016020860161257b565b601f01601f19169290920160200192915050565b8054600090600181811c908083168061215e57607f831692505b602080841082141561217e57634e487b7160e01b86526022600452602486fd5b81801561219257600181146121a3576121d0565b60ff198616895284890196506121d0565b60008881526020902060005b868110156121c85781548b8201529085019083016121af565b505084890196505b50505050505092915050565b60006113998284612144565b60006121f48285612144565b835161220481836020880161257b565b01949350505050565b6001600160a01b0386811682528516602082015260a060408201819052600090612239908301866120de565b828103606084015261224b81866120de565b9050828103608084015261225f8185612118565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906122a590830184612118565b979650505050505050565b60208152600061139960208301846120de565b6040815260006122d660408301856120de565b82810360208401526122e881856120de565b95945050505050565b6020815260006113996020830184612118565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526038908201527f546f6b656e73206e756d62657220746f206d696e742063616e6e6f742065786360408201527f656564206e756d626572206f66204d415820746f6b656e730000000000000000606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60006001600160401b0382111561250f5761250f612691565b5060051b60200190565b6000821982111561252c5761252c612665565b500190565b6000826125405761254061267b565b500490565b600081600019048311821515161561255f5761255f612665565b500290565b60008282101561257657612576612665565b500390565b60005b8381101561259657818101518382015260200161257e565b838111156125a5576000848401525b50505050565b600181811c908216806125bf57607f821691505b602082108114156125e057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b038111828210171561260b5761260b612691565b6040525050565b600060001982141561262657612626612665565b5060010190565b600063ffffffff8083168181141561264757612647612665565b6001019392505050565b6000826126605761266061267b565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d11156126bc57600481823e5160e01c5b90565b600060443d10156126cd5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156126fc57505050505090565b82850191508151818111156127145750505050505090565b843d870101602082850101111561272e5750505050505090565b61273d602082860101876125e6565b509095945050505050565b6001600160e01b031981168114610a7357600080fdfea2646970667358221220af79a5e6f53792d9258ee897878eda9246f66997cde8d0cd1c90c942164b785864736f6c63430008040033

Deployed Bytecode Sourcemap

42795:4709:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20809:231;;;;;;;;;;-1:-1:-1;20809:231:0;;;;;:::i;:::-;;:::i;:::-;;;21793:25:1;;;21781:2;21766:18;20809:231:0;;;;;;;;19832:310;;;;;;;;;;-1:-1:-1;19832:310:0;;;;;:::i;:::-;;:::i;:::-;;;12666:14:1;;12659:22;12641:41;;12629:2;12614:18;19832:310:0;12596:92:1;42839:50:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;42839:50:0;;;;;;;;;;;;:::i;47054:441::-;;;;;;;;;;-1:-1:-1;47054:441:0;;;;;:::i;:::-;;:::i;43015:30::-;;;;;;;;;;;;;;;;43396:20;;;;;;;;;;-1:-1:-1;43396:20:0;;;;;;;;;;;44285:137;;;;;;;;;;-1:-1:-1;44285:137:0;;;;;:::i;:::-;;:::i;:::-;;22904:442;;;;;;;;;;-1:-1:-1;22904:442:0;;;;;:::i;:::-;;:::i;45098:236::-;;;;;;;;;;;;;:::i;45499:514::-;;;;;;:::i;:::-;;:::i;43261:39::-;;;;;;;;;;;;43297:3;43261:39;;46435:471;;;;;;;;;;-1:-1:-1;46435:471:0;;;;;:::i;:::-;;:::i;21206:524::-;;;;;;;;;;-1:-1:-1;21206:524:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;43510:98::-;;;;;;;;;;;;;:::i;1362:94::-;;;;;;;;;;;;;:::i;711:87::-;;;;;;;;;;-1:-1:-1;784:6:0;;711:87;;-1:-1:-1;;;;;784:6:0;;;10307:51:1;;10295:2;10280:18;711:87:0;10262:102:1;44540:216:0;;;;;;;;;;-1:-1:-1;44540:216:0;;;;;:::i;:::-;;:::i;42896:41::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;42896:41:0;;;;;21803:311;;;;;;;;;;-1:-1:-1;21803:311:0;;;;;:::i;:::-;;:::i;43307:44::-;;;;;;;;;;;;;;;;43371:18;;;;;;;;;;-1:-1:-1;43371:18:0;;;;;;;;46111:230;;;;;;;;;;-1:-1:-1;46111:230:0;;;;;:::i;:::-;;:::i;43163:45::-;;;;;;;;;;;;43204:4;43163:45;;43111;;;;;;;;;;;;43154:2;43111:45;;44828:200;;;;;;;;;;-1:-1:-1;44828:200:0;;;;;:::i;:::-;;:::i;22186:168::-;;;;;;;;;;-1:-1:-1;22186:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;22309:27:0;;;22285:4;22309:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;22186:168;43423:28;;;;;;;;;;;;;;;;22426:401;;;;;;;;;;-1:-1:-1;22426:401:0;;;;;:::i;:::-;;:::i;1611:192::-;;;;;;;;;;-1:-1:-1;1611:192:0;;;;;:::i;:::-;;:::i;20809:231::-;20895:7;-1:-1:-1;;;;;20923:21:0;;20915:77;;;;-1:-1:-1;;;20915:77:0;;13949:2:1;20915:77:0;;;13931:21:1;13988:2;13968:18;;;13961:30;14027:34;14007:18;;;14000:62;-1:-1:-1;;;14078:18:1;;;14071:41;14129:19;;20915:77:0;;;;;;;;;-1:-1:-1;21010:9:0;:13;;;;;;;;;;;-1:-1:-1;;;;;21010:22:0;;;;;;;;;;;;20809:231::o;19832:310::-;19934:4;-1:-1:-1;;;;;;19971:41:0;;-1:-1:-1;;;19971:41:0;;:110;;-1:-1:-1;;;;;;;20029:52:0;;-1:-1:-1;;;20029:52:0;19971:110;:163;;;-1:-1:-1;;;;;;;;;;11751:40:0;;;20098:36;19951:183;19832:310;-1:-1:-1;;19832:310:0:o;47054:441::-;47189:13;47238:11;;47229:8;:20;47221:81;;;;-1:-1:-1;;;47221:81:0;;18624:2:1;47221:81:0;;;18606:21:1;18663:2;18643:18;;;18636:30;18702:34;18682:18;;;18675:62;-1:-1:-1;;;18753:18:1;;;18746:46;18809:19;;47221:81:0;18596:238:1;47221:81:0;47318:6;;;;47313:175;;47372:8;47355:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;47341:41;;47054:441;;;:::o;47313:175::-;47446:7;47455:19;:8;:17;:19::i;:::-;47429:46;;;;;;;;;:::i;47313:175::-;47054:441;;;:::o;44285:137::-;784:6;;-1:-1:-1;;;;;784:6:0;174:10;931:23;923:68;;;;-1:-1:-1;;;923:68:0;;;;;;;:::i;:::-;44394:8:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;44394:20:0;;::::1;::::0;;;::::1;::::0;;44285:137::o;22904:442::-;-1:-1:-1;;;;;23137:20:0;;174:10;23137:20;;:60;;-1:-1:-1;23161:36:0;23178:4;174:10;22186:168;:::i;23161:36::-;23115:160;;;;-1:-1:-1;;;23115:160:0;;16657:2:1;23115:160:0;;;16639:21:1;16696:2;16676:18;;;16669:30;16735:34;16715:18;;;16708:62;-1:-1:-1;;;16786:18:1;;;16779:48;16844:19;;23115:160:0;16629:240:1;23115:160:0;23286:52;23309:4;23315:2;23319:3;23324:7;23333:4;23286:22;:52::i;:::-;22904:442;;;;;:::o;45098:236::-;784:6;;-1:-1:-1;;;;;784:6:0;174:10;931:23;923:68;;;;-1:-1:-1;;;923:68:0;;;;;;;:::i;:::-;45193:21:::1;45233:11:::0;45225:56:::1;;;::::0;-1:-1:-1;;;45225:56:0;;15890:2:1;45225:56:0::1;::::0;::::1;15872:21:1::0;;;15909:18;;;15902:30;15968:34;15948:18;;;15941:62;16020:18;;45225:56:0::1;15862:182:1::0;45225:56:0::1;784:6:::0;;45292:34:::1;::::0;-1:-1:-1;;;;;784:6:0;;;;45292:34;::::1;;;::::0;45318:7;;45292:34:::1;::::0;;;45318:7;784:6;45292:34;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;1002:1;45098:236::o:0;45499:514::-;45619:8;;;;;;;45611:43;;;;-1:-1:-1;;;45611:43:0;;17912:2:1;45611:43:0;;;17894:21:1;17951:2;17931:18;;;17924:30;-1:-1:-1;;;17970:18:1;;;17963:52;18032:18;;45611:43:0;17884:172:1;45611:43:0;43154:2;45673:12;:32;;;;45665:68;;;;-1:-1:-1;;;45665:68:0;;15178:2:1;45665:68:0;;;15160:21:1;15217:2;15197:18;;;15190:30;15256:25;15236:18;;;15229:53;15299:18;;45665:68:0;15150:173:1;45665:68:0;43204:4;45752:48;45786:13;;45752:29;45768:12;45752:29;;:11;;:15;;:29;;;;:::i;:::-;:33;;:48::i;:::-;:66;;45744:126;;;;-1:-1:-1;;;45744:126:0;;19041:2:1;45744:126:0;;;19023:21:1;19080:2;19060:18;;;19053:30;19119:34;19099:18;;;19092:62;-1:-1:-1;;;19170:18:1;;;19163:45;19225:19;;45744:126:0;19013:237:1;45744:126:0;45903:8;;:26;;;;;;;:12;:26;:::i;:::-;45890:9;:39;;45881:84;;;;-1:-1:-1;;;45881:84:0;;15530:2:1;45881:84:0;;;15512:21:1;15569:2;15549:18;;;15542:30;15608:33;15588:18;;;15581:61;15659:18;;45881:84:0;15502:181:1;45881:84:0;45976:29;45981:10;45992:12;45976:4;:29::i;:::-;45499:514;:::o;46435:471::-;784:6;;-1:-1:-1;;;;;784:6:0;174:10;931:23;923:68;;;;-1:-1:-1;;;923:68:0;;;;;;;:::i;:::-;43250:4:::1;46563:27;46579:3;:10;46563:11;;:15;;:27;;;;:::i;:::-;:37;46555:106;;;;-1:-1:-1::0;;;46555:106:0::1;;;;;;;:::i;:::-;43297:3;46680:29;46698:3;:10;46680:13;;:17;;:29;;;;:::i;:::-;:42;;46672:82;;;::::0;-1:-1:-1;;;46672:82:0;;21492:2:1;46672:82:0::1;::::0;::::1;21474:21:1::0;21531:2;21511:18;;;21504:30;21570;21550:18;;;21543:58;21618:18;;46672:82:0::1;21464:178:1::0;46672:82:0::1;46769:9;46765:80;46788:3;:10;46784:1;:14;46765:80;;;46819:14;46824:3;46828:1;46824:6;;;;;;-1:-1:-1::0;;;46824:6:0::1;;;;;;;;;;;;;;;46831:1;46819:4;:14::i;:::-;46800:3:::0;::::1;::::0;::::1;:::i;:::-;;;;46765:80;;;-1:-1:-1::0;46887:10:0;;46869:13:::1;::::0;:29:::1;::::0;:17:::1;:29::i;:::-;46855:13;:43:::0;-1:-1:-1;46435:471:0:o;21206:524::-;21362:16;21423:3;:10;21404:8;:15;:29;21396:83;;;;-1:-1:-1;;;21396:83:0;;20271:2:1;21396:83:0;;;20253:21:1;20310:2;20290:18;;;20283:30;20349:34;20329:18;;;20322:62;-1:-1:-1;;;20400:18:1;;;20393:39;20449:19;;21396:83:0;20243:231:1;21396:83:0;21492:30;21539:8;:15;-1:-1:-1;;;;;21525:30:0;;;;;-1:-1:-1;;;21525:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21525:30:0;;21492:63;;21573:9;21568:122;21592:8;:15;21588:1;:19;21568:122;;;21648:30;21658:8;21667:1;21658:11;;;;;;-1:-1:-1;;;21658:11:0;;;;;;;;;;;;;;;21671:3;21675:1;21671:6;;;;;;-1:-1:-1;;;21671:6:0;;;;;;;;;;;;;;;21648:9;:30::i;:::-;21629:13;21643:1;21629:16;;;;;;-1:-1:-1;;;21629:16:0;;;;;;;;;;;;;;;;;;:49;21609:3;;;:::i;:::-;;;21568:122;;;-1:-1:-1;21709:13:0;21206:524;-1:-1:-1;;;21206:524:0:o;43510:98::-;784:6;;-1:-1:-1;;;;;784:6:0;174:10;931:23;923:68;;;;-1:-1:-1;;;923:68:0;;;;;;;:::i;:::-;43587:6:::1;:13:::0;;-1:-1:-1;;43587:13:0::1;43596:4;43587:13;::::0;;43510:98::o;1362:94::-;784:6;;-1:-1:-1;;;;;784:6:0;174:10;931:23;923:68;;;;-1:-1:-1;;;923:68:0;;;;;;;:::i;:::-;1427:21:::1;1445:1;1427:9;:21::i;:::-;1362:94::o:0;44540:216::-;784:6;;-1:-1:-1;;;;;784:6:0;174:10;931:23;923:68;;;;-1:-1:-1;;;923:68:0;;;;;;;:::i;:::-;44673:5:::1;44653:18;:25;;44645:72;;;::::0;-1:-1:-1;;;44645:72:0;;19867:2:1;44645:72:0::1;::::0;::::1;19849:21:1::0;19906:2;19886:18;;;19879:30;19945:34;19925:18;;;19918:62;-1:-1:-1;;;19996:18:1;;;19989:33;20039:19;;44645:72:0::1;19839:225:1::0;44645:72:0::1;44732:8;:14:::0;44540:216::o;21803:311::-;174:10;-1:-1:-1;;;;;21906:24:0;;;;21898:78;;;;-1:-1:-1;;;21898:78:0;;19457:2:1;21898:78:0;;;19439:21:1;19496:2;19476:18;;;19469:30;19535:34;19515:18;;;19508:62;-1:-1:-1;;;19586:18:1;;;19579:39;19635:19;;21898:78:0;19429:231:1;21898:78:0;174:10;21989:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;21989:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;21989:53:0;;;;;;;;;;22058:48;;12641:41:1;;;21989:42:0;;174:10;22058:48;;12614:18:1;22058:48:0;;;;;;;21803:311;;:::o;46111:230::-;784:6;;-1:-1:-1;;;;;784:6:0;174:10;931:23;923:68;;;;-1:-1:-1;;;923:68:0;;;;;;;:::i;:::-;46222:11:::1;::::0;43250:4:::1;::::0;46222:18:::1;::::0;46238:1:::1;46222:15;:18::i;:::-;:28;46214:97;;;;-1:-1:-1::0;;;46214:97:0::1;;;;;;;:::i;:::-;46322:11;46327:3;46331:1;46322:4;:11::i;44828:200::-:0;784:6;;-1:-1:-1;;;;;784:6:0;174:10;931:23;923:68;;;;-1:-1:-1;;;923:68:0;;;;;;;:::i;:::-;44975:20;;::::1;::::0;:8:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;45006:14:0;;::::1;::::0;:7:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;:::-;;44828:200:::0;;:::o;22426:401::-;-1:-1:-1;;;;;22634:20:0;;174:10;22634:20;;:60;;-1:-1:-1;22658:36:0;22675:4;174:10;22186:168;:::i;22658:36::-;22612:151;;;;-1:-1:-1;;;22612:151:0;;14768:2:1;22612:151:0;;;14750:21:1;14807:2;14787:18;;;14780:30;14846:34;14826:18;;;14819:62;-1:-1:-1;;;14897:18:1;;;14890:39;14946:19;;22612:151:0;14740:231:1;22612:151:0;22774:45;22792:4;22798:2;22802;22806:6;22814:4;22774:17;:45::i;1611:192::-;784:6;;-1:-1:-1;;;;;784:6:0;174:10;931:23;923:68;;;;-1:-1:-1;;;923:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1700:22:0;::::1;1692:73;;;::::0;-1:-1:-1;;;1692:73:0;;14361:2:1;1692:73:0::1;::::0;::::1;14343:21:1::0;14400:2;14380:18;;;14373:30;14439:34;14419:18;;;14412:62;-1:-1:-1;;;14490:18:1;;;14483:36;14536:19;;1692:73:0::1;14333:228:1::0;1692:73:0::1;1776:19;1786:8;1776:9;:19::i;41038:723::-:0;41094:13;41315:10;41311:53;;-1:-1:-1;;41342:10:0;;;;;;;;;;;;-1:-1:-1;;;41342:10:0;;;;;41038:723::o;41311:53::-;41389:5;41374:12;41430:78;41437:9;;41430:78;;41463:8;;;;:::i;:::-;;-1:-1:-1;41486:10:0;;-1:-1:-1;41494:2:0;41486:10;;:::i;:::-;;;41430:78;;;41518:19;41550:6;-1:-1:-1;;;;;41540:17:0;;;;;-1:-1:-1;;;41540:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41540:17:0;;41518:39;;41568:154;41575:10;;41568:154;;41602:11;41612:1;41602:11;;:::i;:::-;;-1:-1:-1;41671:10:0;41679:2;41671:5;:10;:::i;:::-;41658:24;;:2;:24;:::i;:::-;41645:39;;41628:6;41635;41628:14;;;;;;-1:-1:-1;;;41628:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;41628:56:0;;;;;;;;-1:-1:-1;41699:11:0;41708:2;41699:11;;:::i;:::-;;;41568:154;;;41746:6;41038:723;-1:-1:-1;;;;41038:723:0:o;24988:1074::-;25215:7;:14;25201:3;:10;:28;25193:81;;;;-1:-1:-1;;;25193:81:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25293:16:0;;25285:66;;;;-1:-1:-1;;;25285:66:0;;;;;;;:::i;:::-;174:10;25364:16;25481:421;25505:3;:10;25501:1;:14;25481:421;;;25537:10;25550:3;25554:1;25550:6;;;;;;-1:-1:-1;;;25550:6:0;;;;;;;;;;;;;;;25537:19;;25571:14;25588:7;25596:1;25588:10;;;;;;-1:-1:-1;;;25588:10:0;;;;;;;;;;;;;;;;;;;;25615:19;25637:13;;;;;;;;;;-1:-1:-1;;;;;25637:19:0;;;;;;;;;;;;25588:10;;-1:-1:-1;25679:21:0;;;;25671:76;;;;-1:-1:-1;;;25671:76:0;;;;;;;:::i;:::-;25791:9;:13;;;;;;;;;;;-1:-1:-1;;;;;25791:19:0;;;;;;;;;;25813:20;;;25791:42;;25863:17;;;;;;;:27;;25813:20;;25791:9;25863:27;;25813:20;;25863:27;:::i;:::-;;;;;;;;25481:421;;;25517:3;;;;:::i;:::-;;;25481:421;;;;25949:2;-1:-1:-1;;;;;25919:47:0;25943:4;-1:-1:-1;;;;;25919:47:0;25933:8;-1:-1:-1;;;;;25919:47:0;;25953:3;25958:7;25919:47;;;;;;;:::i;:::-;;;;;;;;25979:75;26015:8;26025:4;26031:2;26035:3;26040:7;26049:4;25979:35;:75::i;:::-;24988:1074;;;;;;:::o;36647:98::-;36705:7;36732:5;36736:1;36732;:5;:::i;:::-;36725:12;36647:98;-1:-1:-1;;;36647:98:0:o;37028:::-;37086:7;37113:5;37117:1;37113;:5;:::i;37385:98::-;37443:7;37470:5;37474:1;37470;:5;:::i;43666:519::-;43738:1;43730:5;:9;;;43726:419;;;43756:20;43801:5;43793:14;;-1:-1:-1;;;;;43779:29:0;;;;;-1:-1:-1;;;43779:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43779:29:0;;43756:52;;43823:24;43872:5;43864:14;;-1:-1:-1;;;;;43850:29:0;;;;;-1:-1:-1;;;43850:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43850:29:0;;43823:56;;43901:8;43896:127;43919:5;43915:9;;:1;:9;;;43896:127;;;43973:1;43959:15;;:11;;:15;;;;:::i;:::-;43950:3;43954:1;43950:6;;;;;;;;-1:-1:-1;;;43950:6:0;;;;;;;;;;;;;;:24;;;;;44006:1;43993:7;44001:1;43993:10;;;;;;;;-1:-1:-1;;;43993:10:0;;;;;;;;;;;;;;;;;;:14;43926:3;;;;:::i;:::-;;;;43896:127;;;;44039:32;44050:2;44054:3;44059:7;44039:32;;;;;;;;;;;;:10;:32::i;:::-;43726:419;;;;;44104:29;44110:2;44114:11;;44127:1;44104:29;;;;;;;;;;;;:5;:29::i;:::-;44172:5;44157:20;;:11;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;43666:519:0:o;1811:173::-;1886:6;;;-1:-1:-1;;;;;1903:17:0;;;-1:-1:-1;;;;;;1903:17:0;;;;;;;1936:40;;1886:6;;;1903:17;1886:6;;1936:40;;1867:16;;1936:40;1811:173;;:::o;23810:820::-;-1:-1:-1;;;;;23998:16:0;;23990:66;;;;-1:-1:-1;;;23990:66:0;;;;;;;:::i;:::-;174:10;24113:96;174:10;24144:4;24150:2;24154:21;24172:2;24154:17;:21::i;:::-;24177:25;24195:6;24177:17;:25::i;24113:96::-;24222:19;24244:13;;;;;;;;;;;-1:-1:-1;;;;;24244:19:0;;;;;;;;;;24282:21;;;;24274:76;;;;-1:-1:-1;;;24274:76:0;;;;;;;:::i;:::-;24386:9;:13;;;;;;;;;;;-1:-1:-1;;;;;24386:19:0;;;;;;;;;;24408:20;;;24386:42;;24450:17;;;;;;;:27;;24408:20;;24386:9;24450:27;;24408:20;;24450:27;:::i;:::-;;;;-1:-1:-1;;24495:46:0;;;22003:25:1;;;22059:2;22044:18;;22037:34;;;-1:-1:-1;;;;;24495:46:0;;;;;;;;;;;;;;21976:18:1;24495:46:0;;;;;;;24554:68;24585:8;24595:4;24601:2;24605;24609:6;24617:4;24554:30;:68::i;:::-;23810:820;;;;;;;:::o;33077:813::-;-1:-1:-1;;;;;33317:13:0;;3049:20;3097:8;33313:570;;33353:79;;-1:-1:-1;;;33353:79:0;;-1:-1:-1;;;;;33353:43:0;;;;;:79;;33397:8;;33407:4;;33413:3;;33418:7;;33427:4;;33353:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33353:79:0;;;;;;;;-1:-1:-1;;33353:79:0;;;;;;;;;;;;:::i;:::-;;;33349:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33745:6;33738:14;;-1:-1:-1;;;33738:14:0;;;;;;;;:::i;33349:523::-;;;33794:62;;-1:-1:-1;;;33794:62:0;;13119:2:1;33794:62:0;;;13101:21:1;13158:2;13138:18;;;13131:30;13197:34;13177:18;;;13170:62;-1:-1:-1;;;13248:18:1;;;13241:50;13308:19;;33794:62:0;13091:242:1;33349:523:0;-1:-1:-1;;;;;;33514:60:0;;-1:-1:-1;;;33514:60:0;33510:159;;33599:50;;-1:-1:-1;;;33599:50:0;;;;;;;:::i;28350:735::-;-1:-1:-1;;;;;28528:16:0;;28520:62;;;;-1:-1:-1;;;28520:62:0;;;;;;;:::i;:::-;28615:7;:14;28601:3;:10;:28;28593:81;;;;-1:-1:-1;;;28593:81:0;;;;;;;:::i;:::-;174:10;28687:16;28810:103;28834:3;:10;28830:1;:14;28810:103;;;28891:7;28899:1;28891:10;;;;;;-1:-1:-1;;;28891:10:0;;;;;;;;;;;;;;;28866:9;:17;28876:3;28880:1;28876:6;;;;;;-1:-1:-1;;;28876:6:0;;;;;;;;;;;;;;;28866:17;;;;;;;;;;;:21;28884:2;-1:-1:-1;;;;;28866:21:0;-1:-1:-1;;;;;28866:21:0;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;28846:3:0;;-1:-1:-1;28846:3:0;;;:::i;:::-;;;;28810:103;;;;28966:2;-1:-1:-1;;;;;28930:53:0;28962:1;-1:-1:-1;;;;;28930:53:0;28944:8;-1:-1:-1;;;;;28930:53:0;;28970:3;28975:7;28930:53;;;;;;;:::i;:::-;;;;;;;;28996:81;29032:8;29050:1;29054:2;29058:3;29063:7;29072:4;28996:35;:81::i;27395:599::-;-1:-1:-1;;;;;27553:21:0;;27545:67;;;;-1:-1:-1;;;27545:67:0;;;;;;;:::i;:::-;174:10;27669:107;174:10;27625:16;27712:7;27721:21;27739:2;27721:17;:21::i;27669:107::-;27789:9;:13;;;;;;;;;;;-1:-1:-1;;;;;27789:22:0;;;;;;;;;:32;;27815:6;;27789:9;:32;;27815:6;;27789:32;:::i;:::-;;;;-1:-1:-1;;27837:57:0;;;22003:25:1;;;22059:2;22044:18;;22037:34;;;-1:-1:-1;;;;;27837:57:0;;;;27870:1;;27837:57;;;;;;21976:18:1;27837:57:0;;;;;;;27907:79;27938:8;27956:1;27960:7;27969:2;27973:6;27981:4;27907:30;:79::i;33898:198::-;34018:16;;;34032:1;34018:16;;;;;;;;;33964;;33993:22;;34018:16;;;;;;;;;;;;-1:-1:-1;34018:16:0;33993:41;;34056:7;34045:5;34051:1;34045:8;;;;;;-1:-1:-1;;;34045:8:0;;;;;;;;;;;;;;;;;;:18;34083:5;33898:198;-1:-1:-1;;33898:198:0:o;32325:744::-;-1:-1:-1;;;;;32540:13:0;;3049:20;3097:8;32536:526;;32576:72;;-1:-1:-1;;;32576:72:0;;-1:-1:-1;;;;;32576:38:0;;;;;:72;;32615:8;;32625:4;;32631:2;;32635:6;;32643:4;;32576:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32576:72:0;;;;;;;;-1:-1:-1;;32576:72:0;;;;;;;;;;;;:::i;:::-;;;32572:479;;;;:::i;:::-;-1:-1:-1;;;;;;32698:55:0;;-1:-1:-1;;;32698:55:0;32694:154;;32778:50;;-1:-1:-1;;;32778:50:0;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:761;246:5;299:3;292:4;284:6;280:17;276:27;266:2;;321:5;314;307:20;266:2;361:6;348:20;387:4;410:43;450:2;410:43;:::i;:::-;482:2;476:9;494:31;522:2;514:6;494:31;:::i;:::-;560:18;;;594:15;;;;-1:-1:-1;629:15:1;;;679:1;675:10;;;663:23;;659:32;;656:41;-1:-1:-1;653:2:1;;;714:5;707;700:20;653:2;740:5;754:169;768:2;765:1;762:9;754:169;;;825:23;844:3;825:23;:::i;:::-;813:36;;869:12;;;;901;;;;786:1;779:9;754:169;;;-1:-1:-1;941:6:1;;256:697;-1:-1:-1;;;;;;;256:697:1:o;958:755::-;1012:5;1065:3;1058:4;1050:6;1046:17;1042:27;1032:2;;1087:5;1080;1073:20;1032:2;1127:6;1114:20;1153:4;1176:43;1216:2;1176:43;:::i;:::-;1248:2;1242:9;1260:31;1288:2;1280:6;1260:31;:::i;:::-;1326:18;;;1360:15;;;;-1:-1:-1;1395:15:1;;;1445:1;1441:10;;;1429:23;;1425:32;;1422:41;-1:-1:-1;1419:2:1;;;1480:5;1473;1466:20;1419:2;1506:5;1520:163;1534:2;1531:1;1528:9;1520:163;;;1591:17;;1579:30;;1629:12;;;;1661;;;;1552:1;1545:9;1520:163;;1718:160;1783:20;;1839:13;;1832:21;1822:32;;1812:2;;1868:1;1865;1858:12;1883:575;1925:5;1978:3;1971:4;1963:6;1959:17;1955:27;1945:2;;2000:5;1993;1986:20;1945:2;2040:6;2027:20;-1:-1:-1;;;;;2062:2:1;2059:26;2056:2;;;2088:18;;:::i;:::-;2137:2;2131:9;2149:67;2204:2;2185:13;;-1:-1:-1;;2181:27:1;2210:4;2177:38;2131:9;2149:67;:::i;:::-;2240:2;2232:6;2225:18;2286:3;2279:4;2274:2;2266:6;2262:15;2258:26;2255:35;2252:2;;;2307:5;2300;2293:20;2252:2;2375;2368:4;2360:6;2356:17;2349:4;2341:6;2337:17;2324:54;2398:15;;;2415:4;2394:26;2387:41;;;;2402:6;1935:523;-1:-1:-1;;1935:523:1:o;2463:196::-;2522:6;2575:2;2563:9;2554:7;2550:23;2546:32;2543:2;;;2596:6;2588;2581:22;2543:2;2624:29;2643:9;2624:29;:::i;2664:270::-;2732:6;2740;2793:2;2781:9;2772:7;2768:23;2764:32;2761:2;;;2814:6;2806;2799:22;2761:2;2842:29;2861:9;2842:29;:::i;:::-;2832:39;;2890:38;2924:2;2913:9;2909:18;2890:38;:::i;:::-;2880:48;;2751:183;;;;;:::o;2939:983::-;3093:6;3101;3109;3117;3125;3178:3;3166:9;3157:7;3153:23;3149:33;3146:2;;;3200:6;3192;3185:22;3146:2;3228:29;3247:9;3228:29;:::i;:::-;3218:39;;3276:38;3310:2;3299:9;3295:18;3276:38;:::i;:::-;3266:48;;3365:2;3354:9;3350:18;3337:32;-1:-1:-1;;;;;3429:2:1;3421:6;3418:14;3415:2;;;3450:6;3442;3435:22;3415:2;3478:61;3531:7;3522:6;3511:9;3507:22;3478:61;:::i;:::-;3468:71;;3592:2;3581:9;3577:18;3564:32;3548:48;;3621:2;3611:8;3608:16;3605:2;;;3642:6;3634;3627:22;3605:2;3670:63;3725:7;3714:8;3703:9;3699:24;3670:63;:::i;:::-;3660:73;;3786:3;3775:9;3771:19;3758:33;3742:49;;3816:2;3806:8;3803:16;3800:2;;;3837:6;3829;3822:22;3800:2;;3865:51;3908:7;3897:8;3886:9;3882:24;3865:51;:::i;:::-;3855:61;;;3136:786;;;;;;;;:::o;3927:626::-;4031:6;4039;4047;4055;4063;4116:3;4104:9;4095:7;4091:23;4087:33;4084:2;;;4138:6;4130;4123:22;4084:2;4166:29;4185:9;4166:29;:::i;:::-;4156:39;;4214:38;4248:2;4237:9;4233:18;4214:38;:::i;:::-;4204:48;;4299:2;4288:9;4284:18;4271:32;4261:42;;4350:2;4339:9;4335:18;4322:32;4312:42;;4405:3;4394:9;4390:19;4377:33;-1:-1:-1;;;;;4425:6:1;4422:30;4419:2;;;4470:6;4462;4455:22;4419:2;4498:49;4539:7;4530:6;4519:9;4515:22;4498:49;:::i;4558:264::-;4623:6;4631;4684:2;4672:9;4663:7;4659:23;4655:32;4652:2;;;4705:6;4697;4690:22;4652:2;4733:29;4752:9;4733:29;:::i;:::-;4723:39;;4781:35;4812:2;4801:9;4797:18;4781:35;:::i;4827:264::-;4895:6;4903;4956:2;4944:9;4935:7;4931:23;4927:32;4924:2;;;4977:6;4969;4962:22;4924:2;5005:29;5024:9;5005:29;:::i;:::-;4995:39;5081:2;5066:18;;;;5053:32;;-1:-1:-1;;;4914:177:1:o;5096:368::-;5180:6;5233:2;5221:9;5212:7;5208:23;5204:32;5201:2;;;5254:6;5246;5239:22;5201:2;5299:9;5286:23;-1:-1:-1;;;;;5324:6:1;5321:30;5318:2;;;5369:6;5361;5354:22;5318:2;5397:61;5450:7;5441:6;5430:9;5426:22;5397:61;:::i;5469:625::-;5587:6;5595;5648:2;5636:9;5627:7;5623:23;5619:32;5616:2;;;5669:6;5661;5654:22;5616:2;5714:9;5701:23;-1:-1:-1;;;;;5784:2:1;5776:6;5773:14;5770:2;;;5805:6;5797;5790:22;5770:2;5833:61;5886:7;5877:6;5866:9;5862:22;5833:61;:::i;:::-;5823:71;;5947:2;5936:9;5932:18;5919:32;5903:48;;5976:2;5966:8;5963:16;5960:2;;;5997:6;5989;5982:22;5960:2;;6025:63;6080:7;6069:8;6058:9;6054:24;6025:63;:::i;:::-;6015:73;;;5606:488;;;;;:::o;6099:190::-;6155:6;6208:2;6196:9;6187:7;6183:23;6179:32;6176:2;;;6229:6;6221;6214:22;6176:2;6257:26;6273:9;6257:26;:::i;6294:255::-;6352:6;6405:2;6393:9;6384:7;6380:23;6376:32;6373:2;;;6426:6;6418;6411:22;6373:2;6470:9;6457:23;6489:30;6513:5;6489:30;:::i;6554:259::-;6623:6;6676:2;6664:9;6655:7;6651:23;6647:32;6644:2;;;6697:6;6689;6682:22;6644:2;6734:9;6728:16;6753:30;6777:5;6753:30;:::i;6818:571::-;6906:6;6914;6967:2;6955:9;6946:7;6942:23;6938:32;6935:2;;;6988:6;6980;6973:22;6935:2;7033:9;7020:23;-1:-1:-1;;;;;7103:2:1;7095:6;7092:14;7089:2;;;7124:6;7116;7109:22;7089:2;7152:49;7193:7;7184:6;7173:9;7169:22;7152:49;:::i;:::-;7142:59;;7254:2;7243:9;7239:18;7226:32;7210:48;;7283:2;7273:8;7270:16;7267:2;;;7304:6;7296;7289:22;7267:2;;7332:51;7375:7;7364:8;7353:9;7349:24;7332:51;:::i;7394:190::-;7453:6;7506:2;7494:9;7485:7;7481:23;7477:32;7474:2;;;7527:6;7519;7512:22;7474:2;-1:-1:-1;7555:23:1;;7464:120;-1:-1:-1;7464:120:1:o;7589:296::-;7647:6;7700:2;7688:9;7679:7;7675:23;7671:32;7668:2;;;7721:6;7713;7706:22;7668:2;7765:9;7752:23;7815:10;7808:5;7804:22;7797:5;7794:33;7784:2;;7846:6;7838;7831:22;7890:437;7943:3;7981:5;7975:12;8008:6;8003:3;7996:19;8034:4;8063:2;8058:3;8054:12;8047:19;;8100:2;8093:5;8089:14;8121:3;8133:169;8147:6;8144:1;8141:13;8133:169;;;8208:13;;8196:26;;8242:12;;;;8277:15;;;;8169:1;8162:9;8133:169;;;-1:-1:-1;8318:3:1;;7951:376;-1:-1:-1;;;;;7951:376:1:o;8332:257::-;8373:3;8411:5;8405:12;8438:6;8433:3;8426:19;8454:63;8510:6;8503:4;8498:3;8494:14;8487:4;8480:5;8476:16;8454:63;:::i;:::-;8571:2;8550:15;-1:-1:-1;;8546:29:1;8537:39;;;;8578:4;8533:50;;8381:208;-1:-1:-1;;8381:208:1:o;8594:979::-;8679:12;;8644:3;;8736:1;8756:18;;;;8809;;;;8836:2;;8890:4;8882:6;8878:17;8868:27;;8836:2;8916;8964;8956:6;8953:14;8933:18;8930:38;8927:2;;;-1:-1:-1;;;8991:33:1;;9047:4;9044:1;9037:15;9077:4;8998:3;9065:17;8927:2;9108:18;9135:104;;;;9253:1;9248:319;;;;9101:466;;9135:104;-1:-1:-1;;9168:24:1;;9156:37;;9213:16;;;;-1:-1:-1;9135:104:1;;9248:319;22317:4;22336:17;;;22386:4;22370:21;;9342:1;9356:165;9370:6;9367:1;9364:13;9356:165;;;9448:14;;9435:11;;;9428:35;9491:16;;;;9385:10;;9356:165;;;9360:3;;9550:6;9545:3;9541:16;9534:23;;9101:466;;;;;;;8652:921;;;;:::o;9578:197::-;9706:3;9731:38;9765:3;9757:6;9731:38;:::i;9780:376::-;9956:3;9984:38;10018:3;10010:6;9984:38;:::i;:::-;10051:6;10045:13;10067:52;10112:6;10108:2;10101:4;10093:6;10089:17;10067:52;:::i;:::-;10135:15;;9964:192;-1:-1:-1;;;;9964:192:1:o;10369:826::-;-1:-1:-1;;;;;10766:15:1;;;10748:34;;10818:15;;10813:2;10798:18;;10791:43;10728:3;10865:2;10850:18;;10843:31;;;10691:4;;10897:57;;10934:19;;10926:6;10897:57;:::i;:::-;11002:9;10994:6;10990:22;10985:2;10974:9;10970:18;10963:50;11036:44;11073:6;11065;11036:44;:::i;:::-;11022:58;;11129:9;11121:6;11117:22;11111:3;11100:9;11096:19;11089:51;11157:32;11182:6;11174;11157:32;:::i;:::-;11149:40;10700:495;-1:-1:-1;;;;;;;;10700:495:1:o;11200:560::-;-1:-1:-1;;;;;11497:15:1;;;11479:34;;11549:15;;11544:2;11529:18;;11522:43;11596:2;11581:18;;11574:34;;;11639:2;11624:18;;11617:34;;;11459:3;11682;11667:19;;11660:32;;;11422:4;;11709:45;;11734:19;;11726:6;11709:45;:::i;:::-;11701:53;11431:329;-1:-1:-1;;;;;;;11431:329:1:o;11765:261::-;11944:2;11933:9;11926:21;11907:4;11964:56;12016:2;12005:9;12001:18;11993:6;11964:56;:::i;12031:465::-;12288:2;12277:9;12270:21;12251:4;12314:56;12366:2;12355:9;12351:18;12343:6;12314:56;:::i;:::-;12418:9;12410:6;12406:22;12401:2;12390:9;12386:18;12379:50;12446:44;12483:6;12475;12446:44;:::i;:::-;12438:52;12260:236;-1:-1:-1;;;;;12260:236:1:o;12693:219::-;12842:2;12831:9;12824:21;12805:4;12862:44;12902:2;12891:9;12887:18;12879:6;12862:44;:::i;13338:404::-;13540:2;13522:21;;;13579:2;13559:18;;;13552:30;13618:34;13613:2;13598:18;;13591:62;-1:-1:-1;;;13684:2:1;13669:18;;13662:38;13732:3;13717:19;;13512:230::o;16049:401::-;16251:2;16233:21;;;16290:2;16270:18;;;16263:30;16329:34;16324:2;16309:18;;16302:62;-1:-1:-1;;;16395:2:1;16380:18;;16373:35;16440:3;16425:19;;16223:227::o;16874:420::-;17076:2;17058:21;;;17115:2;17095:18;;;17088:30;17154:34;17149:2;17134:18;;17127:62;17225:26;17220:2;17205:18;;17198:54;17284:3;17269:19;;17048:246::o;17299:406::-;17501:2;17483:21;;;17540:2;17520:18;;;17513:30;17579:34;17574:2;17559:18;;17552:62;-1:-1:-1;;;17645:2:1;17630:18;;17623:40;17695:3;17680:19;;17473:232::o;18061:356::-;18263:2;18245:21;;;18282:18;;;18275:30;18341:34;18336:2;18321:18;;18314:62;18408:2;18393:18;;18235:182::o;20479:404::-;20681:2;20663:21;;;20720:2;20700:18;;;20693:30;20759:34;20754:2;20739:18;;20732:62;-1:-1:-1;;;20825:2:1;20810:18;;20803:38;20873:3;20858:19;;20653:230::o;20888:397::-;21090:2;21072:21;;;21129:2;21109:18;;;21102:30;21168:34;21163:2;21148:18;;21141:62;-1:-1:-1;;;21234:2:1;21219:18;;21212:31;21275:3;21260:19;;21062:223::o;22082:183::-;22142:4;-1:-1:-1;;;;;22167:6:1;22164:30;22161:2;;;22197:18;;:::i;:::-;-1:-1:-1;22242:1:1;22238:14;22254:4;22234:25;;22151:114::o;22402:128::-;22442:3;22473:1;22469:6;22466:1;22463:13;22460:2;;;22479:18;;:::i;:::-;-1:-1:-1;22515:9:1;;22450:80::o;22535:120::-;22575:1;22601;22591:2;;22606:18;;:::i;:::-;-1:-1:-1;22640:9:1;;22581:74::o;22660:168::-;22700:7;22766:1;22762;22758:6;22754:14;22751:1;22748:21;22743:1;22736:9;22729:17;22725:45;22722:2;;;22773:18;;:::i;:::-;-1:-1:-1;22813:9:1;;22712:116::o;22833:125::-;22873:4;22901:1;22898;22895:8;22892:2;;;22906:18;;:::i;:::-;-1:-1:-1;22943:9:1;;22882:76::o;22963:258::-;23035:1;23045:113;23059:6;23056:1;23053:13;23045:113;;;23135:11;;;23129:18;23116:11;;;23109:39;23081:2;23074:10;23045:113;;;23176:6;23173:1;23170:13;23167:2;;;23211:1;23202:6;23197:3;23193:16;23186:27;23167:2;;23016:205;;;:::o;23226:380::-;23305:1;23301:12;;;;23348;;;23369:2;;23423:4;23415:6;23411:17;23401:27;;23369:2;23476;23468:6;23465:14;23445:18;23442:38;23439:2;;;23522:10;23517:3;23513:20;23510:1;23503:31;23557:4;23554:1;23547:15;23585:4;23582:1;23575:15;23439:2;;23281:325;;;:::o;23611:249::-;23721:2;23702:13;;-1:-1:-1;;23698:27:1;23686:40;;-1:-1:-1;;;;;23741:34:1;;23777:22;;;23738:62;23735:2;;;23803:18;;:::i;:::-;23839:2;23832:22;-1:-1:-1;;23658:202:1:o;23865:135::-;23904:3;-1:-1:-1;;23925:17:1;;23922:2;;;23945:18;;:::i;:::-;-1:-1:-1;23992:1:1;23981:13;;23912:88::o;24005:201::-;24043:3;24071:10;24116:2;24109:5;24105:14;24143:2;24134:7;24131:15;24128:2;;;24149:18;;:::i;:::-;24198:1;24185:15;;24051:155;-1:-1:-1;;;24051:155:1:o;24211:112::-;24243:1;24269;24259:2;;24274:18;;:::i;:::-;-1:-1:-1;24308:9:1;;24249:74::o;24328:127::-;24389:10;24384:3;24380:20;24377:1;24370:31;24420:4;24417:1;24410:15;24444:4;24441:1;24434:15;24460:127;24521:10;24516:3;24512:20;24509:1;24502:31;24552:4;24549:1;24542:15;24576:4;24573:1;24566:15;24592:127;24653:10;24648:3;24644:20;24641:1;24634:31;24684:4;24681:1;24674:15;24708:4;24705:1;24698:15;24724:185;24759:3;24801:1;24783:16;24780:23;24777:2;;;24851:1;24846:3;24841;24826:27;24882:10;24877:3;24873:20;24777:2;24767:142;:::o;24914:671::-;24953:3;24995:4;24977:16;24974:26;24971:2;;;24961:624;:::o;24971:2::-;25037;25031:9;-1:-1:-1;;25102:16:1;25098:25;;25095:1;25031:9;25074:50;25153:4;25147:11;25177:16;-1:-1:-1;;;;;25283:2:1;25276:4;25268:6;25264:17;25261:25;25256:2;25248:6;25245:14;25242:45;25239:2;;;25290:5;;;;;24961:624;:::o;25239:2::-;25327:6;25321:4;25317:17;25306:28;;25363:3;25357:10;25390:2;25382:6;25379:14;25376:2;;;25396:5;;;;;;24961:624;:::o;25376:2::-;25480;25461:16;25455:4;25451:27;25447:36;25440:4;25431:6;25426:3;25422:16;25418:27;25415:69;25412:2;;;25487:5;;;;;;24961:624;:::o;25412:2::-;25503:57;25554:4;25545:6;25537;25533:19;25529:30;25523:4;25503:57;:::i;:::-;-1:-1:-1;25576:3:1;;24961:624;-1:-1:-1;;;;;24961:624:1:o;25590:131::-;-1:-1:-1;;;;;;25664:32:1;;25654:43;;25644:2;;25711:1;25708;25701:12

Swarm Source

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