ETH Price: $2,971.19 (-4.00%)
Gas: 2 Gwei

Token

Arq MBRSHP Pass (MBRSHP)
 

Overview

Max Total Supply

44 MBRSHP

Holders

44

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 MBRSHP
0x9cb8a093c6f706094658a3f038ba6723f6a5b625
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:
MembershipPass

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2021-09-14
*/

// File @openzeppelin/contracts/utils/introspection/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

/**
 * @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/token/ERC721/[email protected]


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}


// File @openzeppelin/contracts/token/ERC721/[email protected]


/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}


// File @openzeppelin/contracts/utils/[email protected]


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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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/[email protected]


/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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


// File @openzeppelin/contracts/utils/[email protected]


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

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

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

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}


// File @openzeppelin/contracts/utils/introspection/[email protected]


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}


// File @openzeppelin/contracts/token/ERC721/[email protected]


/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI)) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


// File @openzeppelin/contracts/access/[email protected]


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

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

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

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

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

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

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

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



//MBRSHP Physical Contract//

contract MembershipPass is ERC721Enumerable, Ownable {
    uint256 public constant max_passes = 300;
    uint256 private _mintLimit = 15;
    uint256 private _price = 0; //0.5 ETH
    uint256 private _publicSaleTime = 1642876500;
    string private _uriPrefix;
    string private _baseTokenURI;
    mapping(address => uint256) private _walletMinted;


    constructor(string memory baseURI)
        ERC721("Arq MBRSHP Pass", "MBRSHP")
    {
        setBaseURI(baseURI);
        _uriPrefix = "ipfs://"; //default to ipfs 

    }

    function setMintLimit(uint256 limit) public onlyOwner{
        _mintLimit = limit;
    }

    function setURIPrefix (string memory uriPrefix) public onlyOwner{
        _uriPrefix = uriPrefix;
    }
    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }
    function _baseURI() internal view virtual override returns (string memory) {
        return string(abi.encodePacked(_uriPrefix,_baseTokenURI));
    }
    
    function setPublicSaleTime(uint256 _time) public onlyOwner {
        _publicSaleTime = _time;
    }
   
    function getSaleTime() public view returns (uint256) {
       return _publicSaleTime;
    }
    function getTimeUntilSale () public view returns (uint256){
        uint256 saleTime =  getSaleTime();
        if(block.timestamp >= saleTime){
            return 0;
        } else {
            return SafeMath.sub(saleTime,block.timestamp);
        }
    }

    function setPrice(uint256 _newWEIPrice) public onlyOwner {
        _price = _newWEIPrice;
    }

    function getPrice() public view returns (uint256) {
        return _price;
    }
    
    function mint(uint256 _count) public payable {
        uint256 totSupply = totalSupply();
        require(block.timestamp >= getSaleTime(), "Sale is not yet open.");
        require(totSupply < max_passes, "All Passes have been Claimed.");
        require(totSupply + _count <= max_passes,"There are not enough Skulls available");
        require(_walletMinted[msg.sender] + _count <= _mintLimit, "Wallet would exceed mint limit");       
        require(msg.value == SafeMath.mul(getPrice(),_count),"Price was not correct. Please send with the right amount of ETH.");

        for(uint i = 0; i < _count; i++) {
            uint mintIndex = totalSupply();
            if (mintIndex < max_passes) {
                _safeMint(msg.sender, mintIndex);
                _walletMinted[msg.sender] ++;
            }
        }
    }

    function walletOfOwner(address _owner) public view returns (uint256[] memory) {
        uint256 tokenCount = balanceOf(_owner);
        if (tokenCount == 0) {
            return new uint256[](0);
        }

        uint256[] memory tokensId = new uint256[](tokenCount);
        for (uint256 i; i < tokenCount; i++) {
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
    }

    function withdrawAll() public payable onlyOwner {
        require(payable(msg.sender).send(address(this).balance));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSaleTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimeUntilSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"max_passes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newWEIPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"setPublicSaleTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uriPrefix","type":"string"}],"name":"setURIPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052600f600b556000600c556361ec4e54600d553480156200002357600080fd5b50604051620049d9380380620049d983398181016040528101906200004991906200055f565b6040518060400160405280600f81526020017f417271204d4252534850205061737300000000000000000000000000000000008152506040518060400160405280600681526020017f4d425253485000000000000000000000000000000000000000000000000000008152508160009080519060200190620000cd92919062000312565b508060019080519060200190620000e692919062000312565b50505062000109620000fd6200016f60201b60201c565b6200017760201b60201c565b6200011a816200023d60201b60201c565b6040518060400160405280600781526020017f697066733a2f2f00000000000000000000000000000000000000000000000000815250600e90805190602001906200016792919062000312565b505062000698565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200024d6200016f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000273620002e860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002c39062000611565b60405180910390fd5b80600f9080519060200190620002e492919062000312565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003209062000662565b90600052602060002090601f01602090048101928262000344576000855562000390565b82601f106200035f57805160ff191683800117855562000390565b8280016001018555821562000390579182015b828111156200038f57825182559160200191906001019062000372565b5b5090506200039f9190620003a3565b5090565b5b80821115620003be576000816000905550600101620003a4565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200042b82620003e0565b810181811067ffffffffffffffff821117156200044d576200044c620003f1565b5b80604052505050565b600062000462620003c2565b905062000470828262000420565b919050565b600067ffffffffffffffff821115620004935762000492620003f1565b5b6200049e82620003e0565b9050602081019050919050565b60005b83811015620004cb578082015181840152602081019050620004ae565b83811115620004db576000848401525b50505050565b6000620004f8620004f28462000475565b62000456565b905082815260208101848484011115620005175762000516620003db565b5b62000524848285620004ab565b509392505050565b600082601f830112620005445762000543620003d6565b5b815162000556848260208601620004e1565b91505092915050565b600060208284031215620005785762000577620003cc565b5b600082015167ffffffffffffffff811115620005995762000598620003d1565b5b620005a7848285016200052c565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620005f9602083620005b0565b91506200060682620005c1565b602082019050919050565b600060208201905081810360008301526200062c81620005ea565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200067b57607f821691505b6020821081141562000692576200069162000633565b5b50919050565b61433180620006a86000396000f3fe6080604052600436106101d85760003560e01c80636d6021d5116101025780639e6a1d7d11610095578063c87b56dd11610064578063c87b56dd1461068c578063cbf21fe4146106c9578063e985e9c5146106f4578063f2fde38b14610731576101d8565b80639e6a1d7d146105f5578063a0712d681461061e578063a22cb4651461063a578063b88d4fde14610663576101d8565b80638da5cb5b116100d15780638da5cb5b1461054b57806391b7f5ed1461057657806395d89b411461059f57806398d5fdca146105ca576101d8565b80636d6021d5146104c257806370a08231146104ed578063715018a61461052a578063853828b614610541576101d8565b806323b872dd1161017a5780634f6ccce7116101495780634f6ccce7146103f657806355f804b3146104335780636352211e1461045c5780636bff2c2414610499576101d8565b806323b872dd1461032a5780632f745c591461035357806342842e0e14610390578063438b6300146103b9576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806311b7e5e7146102ab57806318160ddd146102d4578063193dc252146102ff576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190612acb565b61075a565b6040516102119190612b13565b60405180910390f35b34801561022657600080fd5b5061022f6107d4565b60405161023c9190612bc7565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612c1f565b610866565b6040516102799190612c8d565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612cd4565b6108eb565b005b3480156102b757600080fd5b506102d260048036038101906102cd9190612c1f565b610a03565b005b3480156102e057600080fd5b506102e9610a89565b6040516102f69190612d23565b60405180910390f35b34801561030b57600080fd5b50610314610a96565b6040516103219190612d23565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c9190612d3e565b610a9c565b005b34801561035f57600080fd5b5061037a60048036038101906103759190612cd4565b610afc565b6040516103879190612d23565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b29190612d3e565b610ba1565b005b3480156103c557600080fd5b506103e060048036038101906103db9190612d91565b610bc1565b6040516103ed9190612e7c565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190612c1f565b610ccb565b60405161042a9190612d23565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190612fd3565b610d3c565b005b34801561046857600080fd5b50610483600480360381019061047e9190612c1f565b610dd2565b6040516104909190612c8d565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190612fd3565b610e84565b005b3480156104ce57600080fd5b506104d7610f1a565b6040516104e49190612d23565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190612d91565b610f49565b6040516105219190612d23565b60405180910390f35b34801561053657600080fd5b5061053f611001565b005b610549611089565b005b34801561055757600080fd5b50610560611145565b60405161056d9190612c8d565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190612c1f565b61116f565b005b3480156105ab57600080fd5b506105b46111f5565b6040516105c19190612bc7565b60405180910390f35b3480156105d657600080fd5b506105df611287565b6040516105ec9190612d23565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190612c1f565b611291565b005b61063860048036038101906106339190612c1f565b611317565b005b34801561064657600080fd5b50610661600480360381019061065c9190613048565b61157c565b005b34801561066f57600080fd5b5061068a60048036038101906106859190613129565b6116fd565b005b34801561069857600080fd5b506106b360048036038101906106ae9190612c1f565b61175f565b6040516106c09190612bc7565b60405180910390f35b3480156106d557600080fd5b506106de6117fc565b6040516106eb9190612d23565b60405180910390f35b34801561070057600080fd5b5061071b600480360381019061071691906131ac565b611806565b6040516107289190612b13565b60405180910390f35b34801561073d57600080fd5b5061075860048036038101906107539190612d91565b61189a565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107cd57506107cc82611992565b5b9050919050565b6060600080546107e39061321b565b80601f016020809104026020016040519081016040528092919081815260200182805461080f9061321b565b801561085c5780601f106108315761010080835404028352916020019161085c565b820191906000526020600020905b81548152906001019060200180831161083f57829003601f168201915b5050505050905090565b600061087182611a74565b6108b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a7906132bf565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108f682610dd2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095e90613351565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610986611ae0565b73ffffffffffffffffffffffffffffffffffffffff1614806109b557506109b4816109af611ae0565b611806565b5b6109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb906133e3565b60405180910390fd5b6109fe8383611ae8565b505050565b610a0b611ae0565b73ffffffffffffffffffffffffffffffffffffffff16610a29611145565b73ffffffffffffffffffffffffffffffffffffffff1614610a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a769061344f565b60405180910390fd5b80600d8190555050565b6000600880549050905090565b61012c81565b610aad610aa7611ae0565b82611ba1565b610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae3906134e1565b60405180910390fd5b610af7838383611c7f565b505050565b6000610b0783610f49565b8210610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90613573565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610bbc838383604051806020016040528060008152506116fd565b505050565b60606000610bce83610f49565b90506000811415610c2b57600067ffffffffffffffff811115610bf457610bf3612ea8565b5b604051908082528060200260200182016040528015610c225781602001602082028036833780820191505090505b50915050610cc6565b60008167ffffffffffffffff811115610c4757610c46612ea8565b5b604051908082528060200260200182016040528015610c755781602001602082028036833780820191505090505b50905060005b82811015610cbf57610c8d8582610afc565b828281518110610ca057610c9f613593565b5b6020026020010181815250508080610cb7906135f1565b915050610c7b565b5080925050505b919050565b6000610cd5610a89565b8210610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d906136ac565b60405180910390fd5b60088281548110610d2a57610d29613593565b5b90600052602060002001549050919050565b610d44611ae0565b73ffffffffffffffffffffffffffffffffffffffff16610d62611145565b73ffffffffffffffffffffffffffffffffffffffff1614610db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daf9061344f565b60405180910390fd5b80600f9080519060200190610dce9291906129bc565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e729061373e565b60405180910390fd5b80915050919050565b610e8c611ae0565b73ffffffffffffffffffffffffffffffffffffffff16610eaa611145565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef79061344f565b60405180910390fd5b80600e9080519060200190610f169291906129bc565b5050565b600080610f256117fc565b9050804210610f38576000915050610f46565b610f428142611edb565b9150505b90565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb1906137d0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611009611ae0565b73ffffffffffffffffffffffffffffffffffffffff16611027611145565b73ffffffffffffffffffffffffffffffffffffffff161461107d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110749061344f565b60405180910390fd5b6110876000611f25565b565b611091611ae0565b73ffffffffffffffffffffffffffffffffffffffff166110af611145565b73ffffffffffffffffffffffffffffffffffffffff1614611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc9061344f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061114357600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611177611ae0565b73ffffffffffffffffffffffffffffffffffffffff16611195611145565b73ffffffffffffffffffffffffffffffffffffffff16146111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e29061344f565b60405180910390fd5b80600c8190555050565b6060600180546112049061321b565b80601f01602080910402602001604051908101604052809291908181526020018280546112309061321b565b801561127d5780601f106112525761010080835404028352916020019161127d565b820191906000526020600020905b81548152906001019060200180831161126057829003601f168201915b5050505050905090565b6000600c54905090565b611299611ae0565b73ffffffffffffffffffffffffffffffffffffffff166112b7611145565b73ffffffffffffffffffffffffffffffffffffffff161461130d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113049061344f565b60405180910390fd5b80600b8190555050565b6000611321610a89565b905061132b6117fc565b42101561136d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113649061383c565b60405180910390fd5b61012c81106113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a8906138a8565b60405180910390fd5b61012c82826113c091906138c8565b1115611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f890613990565b60405180910390fd5b600b5482601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461144f91906138c8565b1115611490576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611487906139fc565b60405180910390fd5b6114a161149b611287565b83611feb565b34146114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990613a8e565b60405180910390fd5b60005b828110156115775760006114f7610a89565b905061012c8110156115635761150d3382612066565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061155d906135f1565b91905055505b50808061156f906135f1565b9150506114e5565b505050565b611584611ae0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e990613afa565b60405180910390fd5b80600560006115ff611ae0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116ac611ae0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116f19190612b13565b60405180910390a35050565b61170e611708611ae0565b83611ba1565b61174d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611744906134e1565b60405180910390fd5b61175984848484612084565b50505050565b606061176a82611a74565b6117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090613b8c565b60405180910390fd5b60006117b36120e0565b905060008151116117d357604051806020016040528060008152506117f4565b806040516020016117e49190613be8565b6040516020818303038152906040525b915050919050565b6000600d54905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118a2611ae0565b73ffffffffffffffffffffffffffffffffffffffff166118c0611145565b73ffffffffffffffffffffffffffffffffffffffff1614611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d9061344f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90613c71565b60405180910390fd5b61198f81611f25565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a5d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a6d5750611a6c8261210b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b5b83610dd2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bac82611a74565b611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be290613d03565b60405180910390fd5b6000611bf683610dd2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c6557508373ffffffffffffffffffffffffffffffffffffffff16611c4d84610866565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c765750611c758185611806565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c9f82610dd2565b73ffffffffffffffffffffffffffffffffffffffff1614611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90613d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c90613e27565b60405180910390fd5b611d70838383612175565b611d7b600082611ae8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dcb9190613e47565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e2291906138c8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000611f1d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612289565b905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080831415611ffe5760009050612060565b6000828461200c9190613e7b565b905082848261201b9190613f04565b1461205b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205290613fa7565b60405180910390fd5b809150505b92915050565b6120808282604051806020016040528060008152506122ed565b5050565b61208f848484611c7f565b61209b84848484612348565b6120da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d190614039565b60405180910390fd5b50505050565b6060600e600f6040516020016120f79291906140ed565b604051602081830303815290604052905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121808383836124d0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121c3576121be816124d5565b612202565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461220157612200838261251e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612245576122408161268b565b612284565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461228357612282828261275c565b5b5b505050565b60008383111582906122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c89190612bc7565b60405180910390fd5b50600083856122e09190613e47565b9050809150509392505050565b6122f783836127db565b6123046000848484612348565b612343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233a90614039565b60405180910390fd5b505050565b60006123698473ffffffffffffffffffffffffffffffffffffffff166129a9565b156124c3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612392611ae0565b8786866040518563ffffffff1660e01b81526004016123b49493929190614166565b6020604051808303816000875af19250505080156123f057506040513d601f19601f820116820180604052508101906123ed91906141c7565b60015b612473573d8060008114612420576040519150601f19603f3d011682016040523d82523d6000602084013e612425565b606091505b5060008151141561246b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246290614039565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124c8565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161252b84610f49565b6125359190613e47565b905060006007600084815260200190815260200160002054905081811461261a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061269f9190613e47565b90506000600960008481526020019081526020016000205490506000600883815481106126cf576126ce613593565b5b9060005260206000200154905080600883815481106126f1576126f0613593565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806127405761273f6141f4565b5b6001900381819060005260206000200160009055905550505050565b600061276783610f49565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561284b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128429061426f565b60405180910390fd5b61285481611a74565b15612894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288b906142db565b60405180910390fd5b6128a060008383612175565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128f091906138c8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546129c89061321b565b90600052602060002090601f0160209004810192826129ea5760008555612a31565b82601f10612a0357805160ff1916838001178555612a31565b82800160010185558215612a31579182015b82811115612a30578251825591602001919060010190612a15565b5b509050612a3e9190612a42565b5090565b5b80821115612a5b576000816000905550600101612a43565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612aa881612a73565b8114612ab357600080fd5b50565b600081359050612ac581612a9f565b92915050565b600060208284031215612ae157612ae0612a69565b5b6000612aef84828501612ab6565b91505092915050565b60008115159050919050565b612b0d81612af8565b82525050565b6000602082019050612b286000830184612b04565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b68578082015181840152602081019050612b4d565b83811115612b77576000848401525b50505050565b6000601f19601f8301169050919050565b6000612b9982612b2e565b612ba38185612b39565b9350612bb3818560208601612b4a565b612bbc81612b7d565b840191505092915050565b60006020820190508181036000830152612be18184612b8e565b905092915050565b6000819050919050565b612bfc81612be9565b8114612c0757600080fd5b50565b600081359050612c1981612bf3565b92915050565b600060208284031215612c3557612c34612a69565b5b6000612c4384828501612c0a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c7782612c4c565b9050919050565b612c8781612c6c565b82525050565b6000602082019050612ca26000830184612c7e565b92915050565b612cb181612c6c565b8114612cbc57600080fd5b50565b600081359050612cce81612ca8565b92915050565b60008060408385031215612ceb57612cea612a69565b5b6000612cf985828601612cbf565b9250506020612d0a85828601612c0a565b9150509250929050565b612d1d81612be9565b82525050565b6000602082019050612d386000830184612d14565b92915050565b600080600060608486031215612d5757612d56612a69565b5b6000612d6586828701612cbf565b9350506020612d7686828701612cbf565b9250506040612d8786828701612c0a565b9150509250925092565b600060208284031215612da757612da6612a69565b5b6000612db584828501612cbf565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612df381612be9565b82525050565b6000612e058383612dea565b60208301905092915050565b6000602082019050919050565b6000612e2982612dbe565b612e338185612dc9565b9350612e3e83612dda565b8060005b83811015612e6f578151612e568882612df9565b9750612e6183612e11565b925050600181019050612e42565b5085935050505092915050565b60006020820190508181036000830152612e968184612e1e565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ee082612b7d565b810181811067ffffffffffffffff82111715612eff57612efe612ea8565b5b80604052505050565b6000612f12612a5f565b9050612f1e8282612ed7565b919050565b600067ffffffffffffffff821115612f3e57612f3d612ea8565b5b612f4782612b7d565b9050602081019050919050565b82818337600083830152505050565b6000612f76612f7184612f23565b612f08565b905082815260208101848484011115612f9257612f91612ea3565b5b612f9d848285612f54565b509392505050565b600082601f830112612fba57612fb9612e9e565b5b8135612fca848260208601612f63565b91505092915050565b600060208284031215612fe957612fe8612a69565b5b600082013567ffffffffffffffff81111561300757613006612a6e565b5b61301384828501612fa5565b91505092915050565b61302581612af8565b811461303057600080fd5b50565b6000813590506130428161301c565b92915050565b6000806040838503121561305f5761305e612a69565b5b600061306d85828601612cbf565b925050602061307e85828601613033565b9150509250929050565b600067ffffffffffffffff8211156130a3576130a2612ea8565b5b6130ac82612b7d565b9050602081019050919050565b60006130cc6130c784613088565b612f08565b9050828152602081018484840111156130e8576130e7612ea3565b5b6130f3848285612f54565b509392505050565b600082601f8301126131105761310f612e9e565b5b81356131208482602086016130b9565b91505092915050565b6000806000806080858703121561314357613142612a69565b5b600061315187828801612cbf565b945050602061316287828801612cbf565b935050604061317387828801612c0a565b925050606085013567ffffffffffffffff81111561319457613193612a6e565b5b6131a0878288016130fb565b91505092959194509250565b600080604083850312156131c3576131c2612a69565b5b60006131d185828601612cbf565b92505060206131e285828601612cbf565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061323357607f821691505b60208210811415613247576132466131ec565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006132a9602c83612b39565b91506132b48261324d565b604082019050919050565b600060208201905081810360008301526132d88161329c565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061333b602183612b39565b9150613346826132df565b604082019050919050565b6000602082019050818103600083015261336a8161332e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006133cd603883612b39565b91506133d882613371565b604082019050919050565b600060208201905081810360008301526133fc816133c0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613439602083612b39565b915061344482613403565b602082019050919050565b600060208201905081810360008301526134688161342c565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006134cb603183612b39565b91506134d68261346f565b604082019050919050565b600060208201905081810360008301526134fa816134be565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061355d602b83612b39565b915061356882613501565b604082019050919050565b6000602082019050818103600083015261358c81613550565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135fc82612be9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561362f5761362e6135c2565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613696602c83612b39565b91506136a18261363a565b604082019050919050565b600060208201905081810360008301526136c581613689565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613728602983612b39565b9150613733826136cc565b604082019050919050565b600060208201905081810360008301526137578161371b565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006137ba602a83612b39565b91506137c58261375e565b604082019050919050565b600060208201905081810360008301526137e9816137ad565b9050919050565b7f53616c65206973206e6f7420796574206f70656e2e0000000000000000000000600082015250565b6000613826601583612b39565b9150613831826137f0565b602082019050919050565b6000602082019050818103600083015261385581613819565b9050919050565b7f416c6c205061737365732068617665206265656e20436c61696d65642e000000600082015250565b6000613892601d83612b39565b915061389d8261385c565b602082019050919050565b600060208201905081810360008301526138c181613885565b9050919050565b60006138d382612be9565b91506138de83612be9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613913576139126135c2565b5b828201905092915050565b7f546865726520617265206e6f7420656e6f75676820536b756c6c73206176616960008201527f6c61626c65000000000000000000000000000000000000000000000000000000602082015250565b600061397a602583612b39565b91506139858261391e565b604082019050919050565b600060208201905081810360008301526139a98161396d565b9050919050565b7f57616c6c657420776f756c6420657863656564206d696e74206c696d69740000600082015250565b60006139e6601e83612b39565b91506139f1826139b0565b602082019050919050565b60006020820190508181036000830152613a15816139d9565b9050919050565b7f507269636520776173206e6f7420636f72726563742e20506c6561736520736560008201527f6e6420776974682074686520726967687420616d6f756e74206f66204554482e602082015250565b6000613a78604083612b39565b9150613a8382613a1c565b604082019050919050565b60006020820190508181036000830152613aa781613a6b565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613ae4601983612b39565b9150613aef82613aae565b602082019050919050565b60006020820190508181036000830152613b1381613ad7565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613b76602f83612b39565b9150613b8182613b1a565b604082019050919050565b60006020820190508181036000830152613ba581613b69565b9050919050565b600081905092915050565b6000613bc282612b2e565b613bcc8185613bac565b9350613bdc818560208601612b4a565b80840191505092915050565b6000613bf48284613bb7565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c5b602683612b39565b9150613c6682613bff565b604082019050919050565b60006020820190508181036000830152613c8a81613c4e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613ced602c83612b39565b9150613cf882613c91565b604082019050919050565b60006020820190508181036000830152613d1c81613ce0565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613d7f602983612b39565b9150613d8a82613d23565b604082019050919050565b60006020820190508181036000830152613dae81613d72565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e11602483612b39565b9150613e1c82613db5565b604082019050919050565b60006020820190508181036000830152613e4081613e04565b9050919050565b6000613e5282612be9565b9150613e5d83612be9565b925082821015613e7057613e6f6135c2565b5b828203905092915050565b6000613e8682612be9565b9150613e9183612be9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613eca57613ec96135c2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f0f82612be9565b9150613f1a83612be9565b925082613f2a57613f29613ed5565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f91602183612b39565b9150613f9c82613f35565b604082019050919050565b60006020820190508181036000830152613fc081613f84565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614023603283612b39565b915061402e82613fc7565b604082019050919050565b6000602082019050818103600083015261405281614016565b9050919050565b60008190508160005260206000209050919050565b6000815461407b8161321b565b6140858186613bac565b945060018216600081146140a057600181146140b1576140e4565b60ff198316865281860193506140e4565b6140ba85614059565b60005b838110156140dc578154818901526001820191506020810190506140bd565b838801955050505b50505092915050565b60006140f9828561406e565b9150614105828461406e565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b600061413882614111565b614142818561411c565b9350614152818560208601612b4a565b61415b81612b7d565b840191505092915050565b600060808201905061417b6000830187612c7e565b6141886020830186612c7e565b6141956040830185612d14565b81810360608301526141a7818461412d565b905095945050505050565b6000815190506141c181612a9f565b92915050565b6000602082840312156141dd576141dc612a69565b5b60006141eb848285016141b2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614259602083612b39565b915061426482614223565b602082019050919050565b600060208201905081810360008301526142888161424c565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006142c5601c83612b39565b91506142d08261428f565b602082019050919050565b600060208201905081810360008301526142f4816142b8565b905091905056fea2646970667358221220784a01bba8115c64b8d63bd6878adda89e3de8e9e43df82ff6e301f69172a15664736f6c634300080b003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000033697066732f516d5a6433796868384578624c34586d627970726e6272675a506b463535614e487133626650415459376d51436800000000000000000000000000

Deployed Bytecode

0x6080604052600436106101d85760003560e01c80636d6021d5116101025780639e6a1d7d11610095578063c87b56dd11610064578063c87b56dd1461068c578063cbf21fe4146106c9578063e985e9c5146106f4578063f2fde38b14610731576101d8565b80639e6a1d7d146105f5578063a0712d681461061e578063a22cb4651461063a578063b88d4fde14610663576101d8565b80638da5cb5b116100d15780638da5cb5b1461054b57806391b7f5ed1461057657806395d89b411461059f57806398d5fdca146105ca576101d8565b80636d6021d5146104c257806370a08231146104ed578063715018a61461052a578063853828b614610541576101d8565b806323b872dd1161017a5780634f6ccce7116101495780634f6ccce7146103f657806355f804b3146104335780636352211e1461045c5780636bff2c2414610499576101d8565b806323b872dd1461032a5780632f745c591461035357806342842e0e14610390578063438b6300146103b9576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806311b7e5e7146102ab57806318160ddd146102d4578063193dc252146102ff576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff9190612acb565b61075a565b6040516102119190612b13565b60405180910390f35b34801561022657600080fd5b5061022f6107d4565b60405161023c9190612bc7565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612c1f565b610866565b6040516102799190612c8d565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612cd4565b6108eb565b005b3480156102b757600080fd5b506102d260048036038101906102cd9190612c1f565b610a03565b005b3480156102e057600080fd5b506102e9610a89565b6040516102f69190612d23565b60405180910390f35b34801561030b57600080fd5b50610314610a96565b6040516103219190612d23565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c9190612d3e565b610a9c565b005b34801561035f57600080fd5b5061037a60048036038101906103759190612cd4565b610afc565b6040516103879190612d23565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b29190612d3e565b610ba1565b005b3480156103c557600080fd5b506103e060048036038101906103db9190612d91565b610bc1565b6040516103ed9190612e7c565b60405180910390f35b34801561040257600080fd5b5061041d60048036038101906104189190612c1f565b610ccb565b60405161042a9190612d23565b60405180910390f35b34801561043f57600080fd5b5061045a60048036038101906104559190612fd3565b610d3c565b005b34801561046857600080fd5b50610483600480360381019061047e9190612c1f565b610dd2565b6040516104909190612c8d565b60405180910390f35b3480156104a557600080fd5b506104c060048036038101906104bb9190612fd3565b610e84565b005b3480156104ce57600080fd5b506104d7610f1a565b6040516104e49190612d23565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190612d91565b610f49565b6040516105219190612d23565b60405180910390f35b34801561053657600080fd5b5061053f611001565b005b610549611089565b005b34801561055757600080fd5b50610560611145565b60405161056d9190612c8d565b60405180910390f35b34801561058257600080fd5b5061059d60048036038101906105989190612c1f565b61116f565b005b3480156105ab57600080fd5b506105b46111f5565b6040516105c19190612bc7565b60405180910390f35b3480156105d657600080fd5b506105df611287565b6040516105ec9190612d23565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190612c1f565b611291565b005b61063860048036038101906106339190612c1f565b611317565b005b34801561064657600080fd5b50610661600480360381019061065c9190613048565b61157c565b005b34801561066f57600080fd5b5061068a60048036038101906106859190613129565b6116fd565b005b34801561069857600080fd5b506106b360048036038101906106ae9190612c1f565b61175f565b6040516106c09190612bc7565b60405180910390f35b3480156106d557600080fd5b506106de6117fc565b6040516106eb9190612d23565b60405180910390f35b34801561070057600080fd5b5061071b600480360381019061071691906131ac565b611806565b6040516107289190612b13565b60405180910390f35b34801561073d57600080fd5b5061075860048036038101906107539190612d91565b61189a565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107cd57506107cc82611992565b5b9050919050565b6060600080546107e39061321b565b80601f016020809104026020016040519081016040528092919081815260200182805461080f9061321b565b801561085c5780601f106108315761010080835404028352916020019161085c565b820191906000526020600020905b81548152906001019060200180831161083f57829003601f168201915b5050505050905090565b600061087182611a74565b6108b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a7906132bf565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108f682610dd2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095e90613351565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610986611ae0565b73ffffffffffffffffffffffffffffffffffffffff1614806109b557506109b4816109af611ae0565b611806565b5b6109f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109eb906133e3565b60405180910390fd5b6109fe8383611ae8565b505050565b610a0b611ae0565b73ffffffffffffffffffffffffffffffffffffffff16610a29611145565b73ffffffffffffffffffffffffffffffffffffffff1614610a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a769061344f565b60405180910390fd5b80600d8190555050565b6000600880549050905090565b61012c81565b610aad610aa7611ae0565b82611ba1565b610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae3906134e1565b60405180910390fd5b610af7838383611c7f565b505050565b6000610b0783610f49565b8210610b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3f90613573565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610bbc838383604051806020016040528060008152506116fd565b505050565b60606000610bce83610f49565b90506000811415610c2b57600067ffffffffffffffff811115610bf457610bf3612ea8565b5b604051908082528060200260200182016040528015610c225781602001602082028036833780820191505090505b50915050610cc6565b60008167ffffffffffffffff811115610c4757610c46612ea8565b5b604051908082528060200260200182016040528015610c755781602001602082028036833780820191505090505b50905060005b82811015610cbf57610c8d8582610afc565b828281518110610ca057610c9f613593565b5b6020026020010181815250508080610cb7906135f1565b915050610c7b565b5080925050505b919050565b6000610cd5610a89565b8210610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d906136ac565b60405180910390fd5b60088281548110610d2a57610d29613593565b5b90600052602060002001549050919050565b610d44611ae0565b73ffffffffffffffffffffffffffffffffffffffff16610d62611145565b73ffffffffffffffffffffffffffffffffffffffff1614610db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daf9061344f565b60405180910390fd5b80600f9080519060200190610dce9291906129bc565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e729061373e565b60405180910390fd5b80915050919050565b610e8c611ae0565b73ffffffffffffffffffffffffffffffffffffffff16610eaa611145565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef79061344f565b60405180910390fd5b80600e9080519060200190610f169291906129bc565b5050565b600080610f256117fc565b9050804210610f38576000915050610f46565b610f428142611edb565b9150505b90565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb1906137d0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611009611ae0565b73ffffffffffffffffffffffffffffffffffffffff16611027611145565b73ffffffffffffffffffffffffffffffffffffffff161461107d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110749061344f565b60405180910390fd5b6110876000611f25565b565b611091611ae0565b73ffffffffffffffffffffffffffffffffffffffff166110af611145565b73ffffffffffffffffffffffffffffffffffffffff1614611105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fc9061344f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061114357600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611177611ae0565b73ffffffffffffffffffffffffffffffffffffffff16611195611145565b73ffffffffffffffffffffffffffffffffffffffff16146111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e29061344f565b60405180910390fd5b80600c8190555050565b6060600180546112049061321b565b80601f01602080910402602001604051908101604052809291908181526020018280546112309061321b565b801561127d5780601f106112525761010080835404028352916020019161127d565b820191906000526020600020905b81548152906001019060200180831161126057829003601f168201915b5050505050905090565b6000600c54905090565b611299611ae0565b73ffffffffffffffffffffffffffffffffffffffff166112b7611145565b73ffffffffffffffffffffffffffffffffffffffff161461130d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113049061344f565b60405180910390fd5b80600b8190555050565b6000611321610a89565b905061132b6117fc565b42101561136d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113649061383c565b60405180910390fd5b61012c81106113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a8906138a8565b60405180910390fd5b61012c82826113c091906138c8565b1115611401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f890613990565b60405180910390fd5b600b5482601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461144f91906138c8565b1115611490576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611487906139fc565b60405180910390fd5b6114a161149b611287565b83611feb565b34146114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990613a8e565b60405180910390fd5b60005b828110156115775760006114f7610a89565b905061012c8110156115635761150d3382612066565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061155d906135f1565b91905055505b50808061156f906135f1565b9150506114e5565b505050565b611584611ae0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e990613afa565b60405180910390fd5b80600560006115ff611ae0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166116ac611ae0565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116f19190612b13565b60405180910390a35050565b61170e611708611ae0565b83611ba1565b61174d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611744906134e1565b60405180910390fd5b61175984848484612084565b50505050565b606061176a82611a74565b6117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090613b8c565b60405180910390fd5b60006117b36120e0565b905060008151116117d357604051806020016040528060008152506117f4565b806040516020016117e49190613be8565b6040516020818303038152906040525b915050919050565b6000600d54905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118a2611ae0565b73ffffffffffffffffffffffffffffffffffffffff166118c0611145565b73ffffffffffffffffffffffffffffffffffffffff1614611916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190d9061344f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d90613c71565b60405180910390fd5b61198f81611f25565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a5d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a6d5750611a6c8261210b565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b5b83610dd2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bac82611a74565b611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be290613d03565b60405180910390fd5b6000611bf683610dd2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c6557508373ffffffffffffffffffffffffffffffffffffffff16611c4d84610866565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c765750611c758185611806565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c9f82610dd2565b73ffffffffffffffffffffffffffffffffffffffff1614611cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cec90613d95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5c90613e27565b60405180910390fd5b611d70838383612175565b611d7b600082611ae8565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dcb9190613e47565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e2291906138c8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000611f1d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612289565b905092915050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080831415611ffe5760009050612060565b6000828461200c9190613e7b565b905082848261201b9190613f04565b1461205b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205290613fa7565b60405180910390fd5b809150505b92915050565b6120808282604051806020016040528060008152506122ed565b5050565b61208f848484611c7f565b61209b84848484612348565b6120da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d190614039565b60405180910390fd5b50505050565b6060600e600f6040516020016120f79291906140ed565b604051602081830303815290604052905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121808383836124d0565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121c3576121be816124d5565b612202565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461220157612200838261251e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612245576122408161268b565b612284565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461228357612282828261275c565b5b5b505050565b60008383111582906122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c89190612bc7565b60405180910390fd5b50600083856122e09190613e47565b9050809150509392505050565b6122f783836127db565b6123046000848484612348565b612343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233a90614039565b60405180910390fd5b505050565b60006123698473ffffffffffffffffffffffffffffffffffffffff166129a9565b156124c3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612392611ae0565b8786866040518563ffffffff1660e01b81526004016123b49493929190614166565b6020604051808303816000875af19250505080156123f057506040513d601f19601f820116820180604052508101906123ed91906141c7565b60015b612473573d8060008114612420576040519150601f19603f3d011682016040523d82523d6000602084013e612425565b606091505b5060008151141561246b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246290614039565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124c8565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161252b84610f49565b6125359190613e47565b905060006007600084815260200190815260200160002054905081811461261a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061269f9190613e47565b90506000600960008481526020019081526020016000205490506000600883815481106126cf576126ce613593565b5b9060005260206000200154905080600883815481106126f1576126f0613593565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806127405761273f6141f4565b5b6001900381819060005260206000200160009055905550505050565b600061276783610f49565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561284b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128429061426f565b60405180910390fd5b61285481611a74565b15612894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288b906142db565b60405180910390fd5b6128a060008383612175565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128f091906138c8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546129c89061321b565b90600052602060002090601f0160209004810192826129ea5760008555612a31565b82601f10612a0357805160ff1916838001178555612a31565b82800160010185558215612a31579182015b82811115612a30578251825591602001919060010190612a15565b5b509050612a3e9190612a42565b5090565b5b80821115612a5b576000816000905550600101612a43565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612aa881612a73565b8114612ab357600080fd5b50565b600081359050612ac581612a9f565b92915050565b600060208284031215612ae157612ae0612a69565b5b6000612aef84828501612ab6565b91505092915050565b60008115159050919050565b612b0d81612af8565b82525050565b6000602082019050612b286000830184612b04565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b68578082015181840152602081019050612b4d565b83811115612b77576000848401525b50505050565b6000601f19601f8301169050919050565b6000612b9982612b2e565b612ba38185612b39565b9350612bb3818560208601612b4a565b612bbc81612b7d565b840191505092915050565b60006020820190508181036000830152612be18184612b8e565b905092915050565b6000819050919050565b612bfc81612be9565b8114612c0757600080fd5b50565b600081359050612c1981612bf3565b92915050565b600060208284031215612c3557612c34612a69565b5b6000612c4384828501612c0a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c7782612c4c565b9050919050565b612c8781612c6c565b82525050565b6000602082019050612ca26000830184612c7e565b92915050565b612cb181612c6c565b8114612cbc57600080fd5b50565b600081359050612cce81612ca8565b92915050565b60008060408385031215612ceb57612cea612a69565b5b6000612cf985828601612cbf565b9250506020612d0a85828601612c0a565b9150509250929050565b612d1d81612be9565b82525050565b6000602082019050612d386000830184612d14565b92915050565b600080600060608486031215612d5757612d56612a69565b5b6000612d6586828701612cbf565b9350506020612d7686828701612cbf565b9250506040612d8786828701612c0a565b9150509250925092565b600060208284031215612da757612da6612a69565b5b6000612db584828501612cbf565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612df381612be9565b82525050565b6000612e058383612dea565b60208301905092915050565b6000602082019050919050565b6000612e2982612dbe565b612e338185612dc9565b9350612e3e83612dda565b8060005b83811015612e6f578151612e568882612df9565b9750612e6183612e11565b925050600181019050612e42565b5085935050505092915050565b60006020820190508181036000830152612e968184612e1e565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ee082612b7d565b810181811067ffffffffffffffff82111715612eff57612efe612ea8565b5b80604052505050565b6000612f12612a5f565b9050612f1e8282612ed7565b919050565b600067ffffffffffffffff821115612f3e57612f3d612ea8565b5b612f4782612b7d565b9050602081019050919050565b82818337600083830152505050565b6000612f76612f7184612f23565b612f08565b905082815260208101848484011115612f9257612f91612ea3565b5b612f9d848285612f54565b509392505050565b600082601f830112612fba57612fb9612e9e565b5b8135612fca848260208601612f63565b91505092915050565b600060208284031215612fe957612fe8612a69565b5b600082013567ffffffffffffffff81111561300757613006612a6e565b5b61301384828501612fa5565b91505092915050565b61302581612af8565b811461303057600080fd5b50565b6000813590506130428161301c565b92915050565b6000806040838503121561305f5761305e612a69565b5b600061306d85828601612cbf565b925050602061307e85828601613033565b9150509250929050565b600067ffffffffffffffff8211156130a3576130a2612ea8565b5b6130ac82612b7d565b9050602081019050919050565b60006130cc6130c784613088565b612f08565b9050828152602081018484840111156130e8576130e7612ea3565b5b6130f3848285612f54565b509392505050565b600082601f8301126131105761310f612e9e565b5b81356131208482602086016130b9565b91505092915050565b6000806000806080858703121561314357613142612a69565b5b600061315187828801612cbf565b945050602061316287828801612cbf565b935050604061317387828801612c0a565b925050606085013567ffffffffffffffff81111561319457613193612a6e565b5b6131a0878288016130fb565b91505092959194509250565b600080604083850312156131c3576131c2612a69565b5b60006131d185828601612cbf565b92505060206131e285828601612cbf565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061323357607f821691505b60208210811415613247576132466131ec565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006132a9602c83612b39565b91506132b48261324d565b604082019050919050565b600060208201905081810360008301526132d88161329c565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061333b602183612b39565b9150613346826132df565b604082019050919050565b6000602082019050818103600083015261336a8161332e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006133cd603883612b39565b91506133d882613371565b604082019050919050565b600060208201905081810360008301526133fc816133c0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613439602083612b39565b915061344482613403565b602082019050919050565b600060208201905081810360008301526134688161342c565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006134cb603183612b39565b91506134d68261346f565b604082019050919050565b600060208201905081810360008301526134fa816134be565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061355d602b83612b39565b915061356882613501565b604082019050919050565b6000602082019050818103600083015261358c81613550565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006135fc82612be9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561362f5761362e6135c2565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000613696602c83612b39565b91506136a18261363a565b604082019050919050565b600060208201905081810360008301526136c581613689565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613728602983612b39565b9150613733826136cc565b604082019050919050565b600060208201905081810360008301526137578161371b565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006137ba602a83612b39565b91506137c58261375e565b604082019050919050565b600060208201905081810360008301526137e9816137ad565b9050919050565b7f53616c65206973206e6f7420796574206f70656e2e0000000000000000000000600082015250565b6000613826601583612b39565b9150613831826137f0565b602082019050919050565b6000602082019050818103600083015261385581613819565b9050919050565b7f416c6c205061737365732068617665206265656e20436c61696d65642e000000600082015250565b6000613892601d83612b39565b915061389d8261385c565b602082019050919050565b600060208201905081810360008301526138c181613885565b9050919050565b60006138d382612be9565b91506138de83612be9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613913576139126135c2565b5b828201905092915050565b7f546865726520617265206e6f7420656e6f75676820536b756c6c73206176616960008201527f6c61626c65000000000000000000000000000000000000000000000000000000602082015250565b600061397a602583612b39565b91506139858261391e565b604082019050919050565b600060208201905081810360008301526139a98161396d565b9050919050565b7f57616c6c657420776f756c6420657863656564206d696e74206c696d69740000600082015250565b60006139e6601e83612b39565b91506139f1826139b0565b602082019050919050565b60006020820190508181036000830152613a15816139d9565b9050919050565b7f507269636520776173206e6f7420636f72726563742e20506c6561736520736560008201527f6e6420776974682074686520726967687420616d6f756e74206f66204554482e602082015250565b6000613a78604083612b39565b9150613a8382613a1c565b604082019050919050565b60006020820190508181036000830152613aa781613a6b565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613ae4601983612b39565b9150613aef82613aae565b602082019050919050565b60006020820190508181036000830152613b1381613ad7565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613b76602f83612b39565b9150613b8182613b1a565b604082019050919050565b60006020820190508181036000830152613ba581613b69565b9050919050565b600081905092915050565b6000613bc282612b2e565b613bcc8185613bac565b9350613bdc818560208601612b4a565b80840191505092915050565b6000613bf48284613bb7565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c5b602683612b39565b9150613c6682613bff565b604082019050919050565b60006020820190508181036000830152613c8a81613c4e565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613ced602c83612b39565b9150613cf882613c91565b604082019050919050565b60006020820190508181036000830152613d1c81613ce0565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613d7f602983612b39565b9150613d8a82613d23565b604082019050919050565b60006020820190508181036000830152613dae81613d72565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e11602483612b39565b9150613e1c82613db5565b604082019050919050565b60006020820190508181036000830152613e4081613e04565b9050919050565b6000613e5282612be9565b9150613e5d83612be9565b925082821015613e7057613e6f6135c2565b5b828203905092915050565b6000613e8682612be9565b9150613e9183612be9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613eca57613ec96135c2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f0f82612be9565b9150613f1a83612be9565b925082613f2a57613f29613ed5565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f91602183612b39565b9150613f9c82613f35565b604082019050919050565b60006020820190508181036000830152613fc081613f84565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614023603283612b39565b915061402e82613fc7565b604082019050919050565b6000602082019050818103600083015261405281614016565b9050919050565b60008190508160005260206000209050919050565b6000815461407b8161321b565b6140858186613bac565b945060018216600081146140a057600181146140b1576140e4565b60ff198316865281860193506140e4565b6140ba85614059565b60005b838110156140dc578154818901526001820191506020810190506140bd565b838801955050505b50505092915050565b60006140f9828561406e565b9150614105828461406e565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b600061413882614111565b614142818561411c565b9350614152818560208601612b4a565b61415b81612b7d565b840191505092915050565b600060808201905061417b6000830187612c7e565b6141886020830186612c7e565b6141956040830185612d14565b81810360608301526141a7818461412d565b905095945050505050565b6000815190506141c181612a9f565b92915050565b6000602082840312156141dd576141dc612a69565b5b60006141eb848285016141b2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614259602083612b39565b915061426482614223565b602082019050919050565b600060208201905081810360008301526142888161424c565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006142c5601c83612b39565b91506142d08261428f565b602082019050919050565b600060208201905081810360008301526142f4816142b8565b905091905056fea2646970667358221220784a01bba8115c64b8d63bd6878adda89e3de8e9e43df82ff6e301f69172a15664736f6c634300080b0033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000033697066732f516d5a6433796868384578624c34586d627970726e6272675a506b463535614e487133626650415459376d51436800000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): ipfs/QmZd3yhh8ExbL4XmbyprnbrgZPkF55aNHq3bfPATY7mQCh

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000033
Arg [2] : 697066732f516d5a6433796868384578624c34586d627970726e6272675a506b
Arg [3] : 463535614e487133626650415459376d51436800000000000000000000000000


Deployed Bytecode Sourcemap

47615:3120:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39176:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21293:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22832:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22355:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48646:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39816:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47675:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23722:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39484:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24132:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50175:426;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40006:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48375:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20987:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48264:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48857:264;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20717:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46950:94;;;;;;;;;;;;;:::i;:::-;;50609:123;;;:::i;:::-;;46299:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49129:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21462:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49234:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48166:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49328:839;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23125:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24388:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21637:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48758:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23491:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47199:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39176:224;39278:4;39317:35;39302:50;;;:11;:50;;;;:90;;;;39356:36;39380:11;39356:23;:36::i;:::-;39302:90;39295:97;;39176:224;;;:::o;21293:100::-;21347:13;21380:5;21373:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21293:100;:::o;22832:221::-;22908:7;22936:16;22944:7;22936;:16::i;:::-;22928:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23021:15;:24;23037:7;23021:24;;;;;;;;;;;;;;;;;;;;;23014:31;;22832:221;;;:::o;22355:411::-;22436:13;22452:23;22467:7;22452:14;:23::i;:::-;22436:39;;22500:5;22494:11;;:2;:11;;;;22486:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22594:5;22578:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22603:37;22620:5;22627:12;:10;:12::i;:::-;22603:16;:37::i;:::-;22578:62;22556:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22737:21;22746:2;22750:7;22737:8;:21::i;:::-;22425:341;22355:411;;:::o;48646:101::-;46530:12;:10;:12::i;:::-;46519:23;;:7;:5;:7::i;:::-;:23;;;46511:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48734:5:::1;48716:15;:23;;;;48646:101:::0;:::o;39816:113::-;39877:7;39904:10;:17;;;;39897:24;;39816:113;:::o;47675:40::-;47712:3;47675:40;:::o;23722:339::-;23917:41;23936:12;:10;:12::i;:::-;23950:7;23917:18;:41::i;:::-;23909:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24025:28;24035:4;24041:2;24045:7;24025:9;:28::i;:::-;23722:339;;;:::o;39484:256::-;39581:7;39617:23;39634:5;39617:16;:23::i;:::-;39609:5;:31;39601:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39706:12;:19;39719:5;39706:19;;;;;;;;;;;;;;;:26;39726:5;39706:26;;;;;;;;;;;;39699:33;;39484:256;;;;:::o;24132:185::-;24270:39;24287:4;24293:2;24297:7;24270:39;;;;;;;;;;;;:16;:39::i;:::-;24132:185;;;:::o;50175:426::-;50235:16;50264:18;50285:17;50295:6;50285:9;:17::i;:::-;50264:38;;50331:1;50317:10;:15;50313:71;;;50370:1;50356:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50349:23;;;;;50313:71;50396:25;50438:10;50424:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50396:53;;50465:9;50460:108;50480:10;50476:1;:14;50460:108;;;50526:30;50546:6;50554:1;50526:19;:30::i;:::-;50512:8;50521:1;50512:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;50492:3;;;;;:::i;:::-;;;;50460:108;;;;50585:8;50578:15;;;;50175:426;;;;:::o;40006:233::-;40081:7;40117:30;:28;:30::i;:::-;40109:5;:38;40101:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40214:10;40225:5;40214:17;;;;;;;;:::i;:::-;;;;;;;;;;40207:24;;40006:233;;;:::o;48375:102::-;46530:12;:10;:12::i;:::-;46519:23;;:7;:5;:7::i;:::-;:23;;;46511:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48462:7:::1;48446:13;:23;;;;;;;;;;;;:::i;:::-;;48375:102:::0;:::o;20987:239::-;21059:7;21079:13;21095:7;:16;21103:7;21095:16;;;;;;;;;;;;;;;;;;;;;21079:32;;21147:1;21130:19;;:5;:19;;;;21122:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21213:5;21206:12;;;20987:239;;;:::o;48264:105::-;46530:12;:10;:12::i;:::-;46519:23;;:7;:5;:7::i;:::-;:23;;;46511:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48352:9:::1;48339:10;:22;;;;;;;;;;;;:::i;:::-;;48264:105:::0;:::o;48857:264::-;48907:7;48926:16;48946:13;:11;:13::i;:::-;48926:33;;48992:8;48973:15;:27;48970:144;;49023:1;49016:8;;;;;48970:144;49064:38;49077:8;49086:15;49064:12;:38::i;:::-;49057:45;;;48857:264;;:::o;20717:208::-;20789:7;20834:1;20817:19;;:5;:19;;;;20809:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20901:9;:16;20911:5;20901:16;;;;;;;;;;;;;;;;20894:23;;20717:208;;;:::o;46950:94::-;46530:12;:10;:12::i;:::-;46519:23;;:7;:5;:7::i;:::-;:23;;;46511:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47015:21:::1;47033:1;47015:9;:21::i;:::-;46950:94::o:0;50609:123::-;46530:12;:10;:12::i;:::-;46519:23;;:7;:5;:7::i;:::-;:23;;;46511:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50684:10:::1;50676:24;;:47;50701:21;50676:47;;;;;;;;;;;;;;;;;;;;;;;50668:56;;;::::0;::::1;;50609:123::o:0;46299:87::-;46345:7;46372:6;;;;;;;;;;;46365:13;;46299:87;:::o;49129:97::-;46530:12;:10;:12::i;:::-;46519:23;;:7;:5;:7::i;:::-;:23;;;46511:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49206:12:::1;49197:6;:21;;;;49129:97:::0;:::o;21462:104::-;21518:13;21551:7;21544:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21462:104;:::o;49234:82::-;49275:7;49302:6;;49295:13;;49234:82;:::o;48166:90::-;46530:12;:10;:12::i;:::-;46519:23;;:7;:5;:7::i;:::-;:23;;;46511:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48243:5:::1;48230:10;:18;;;;48166:90:::0;:::o;49328:839::-;49384:17;49404:13;:11;:13::i;:::-;49384:33;;49455:13;:11;:13::i;:::-;49436:15;:32;;49428:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;47712:3;49513:9;:22;49505:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47712:3;49600:6;49588:9;:18;;;;:::i;:::-;:32;;49580:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;49718:10;;49708:6;49680:13;:25;49694:10;49680:25;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;:48;;49672:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;49802:31;49815:10;:8;:10::i;:::-;49826:6;49802:12;:31::i;:::-;49789:9;:44;49781:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;49918:6;49914:246;49934:6;49930:1;:10;49914:246;;;49962:14;49979:13;:11;:13::i;:::-;49962:30;;47712:3;50011:9;:22;50007:142;;;50054:32;50064:10;50076:9;50054;:32::i;:::-;50105:13;:25;50119:10;50105:25;;;;;;;;;;;;;;;;:28;;;;;;;;;:::i;:::-;;;;;;50007:142;49947:213;49942:3;;;;;:::i;:::-;;;;49914:246;;;;49373:794;49328:839;:::o;23125:295::-;23240:12;:10;:12::i;:::-;23228:24;;:8;:24;;;;23220:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23340:8;23295:18;:32;23314:12;:10;:12::i;:::-;23295:32;;;;;;;;;;;;;;;:42;23328:8;23295:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23393:8;23364:48;;23379:12;:10;:12::i;:::-;23364:48;;;23403:8;23364:48;;;;;;:::i;:::-;;;;;;;;23125:295;;:::o;24388:328::-;24563:41;24582:12;:10;:12::i;:::-;24596:7;24563:18;:41::i;:::-;24555:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24669:39;24683:4;24689:2;24693:7;24702:5;24669:13;:39::i;:::-;24388:328;;;;:::o;21637:314::-;21710:13;21744:16;21752:7;21744;:16::i;:::-;21736:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21825:21;21849:10;:8;:10::i;:::-;21825:34;;21901:1;21883:7;21877:21;:25;:66;;;;;;;;;;;;;;;;;21929:7;21912:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;21877:66;21870:73;;;21637:314;;;:::o;48758:93::-;48802:7;48828:15;;48821:22;;48758:93;:::o;23491:164::-;23588:4;23612:18;:25;23631:5;23612:25;;;;;;;;;;;;;;;:35;23638:8;23612:35;;;;;;;;;;;;;;;;;;;;;;;;;23605:42;;23491:164;;;;:::o;47199:192::-;46530:12;:10;:12::i;:::-;46519:23;;:7;:5;:7::i;:::-;:23;;;46511:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47308:1:::1;47288:22;;:8;:22;;;;47280:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47364:19;47374:8;47364:9;:19::i;:::-;47199:192:::0;:::o;20348:305::-;20450:4;20502:25;20487:40;;;:11;:40;;;;:105;;;;20559:33;20544:48;;;:11;:48;;;;20487:105;:158;;;;20609:36;20633:11;20609:23;:36::i;:::-;20487:158;20467:178;;20348:305;;;:::o;26226:127::-;26291:4;26343:1;26315:30;;:7;:16;26323:7;26315:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26308:37;;26226:127;;;:::o;15849:98::-;15902:7;15929:10;15922:17;;15849:98;:::o;30208:174::-;30310:2;30283:15;:24;30299:7;30283:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30366:7;30362:2;30328:46;;30337:23;30352:7;30337:14;:23::i;:::-;30328:46;;;;;;;;;;;;30208:174;;:::o;26520:348::-;26613:4;26638:16;26646:7;26638;:16::i;:::-;26630:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26714:13;26730:23;26745:7;26730:14;:23::i;:::-;26714:39;;26783:5;26772:16;;:7;:16;;;:51;;;;26816:7;26792:31;;:20;26804:7;26792:11;:20::i;:::-;:31;;;26772:51;:87;;;;26827:32;26844:5;26851:7;26827:16;:32::i;:::-;26772:87;26764:96;;;26520:348;;;;:::o;29512:578::-;29671:4;29644:31;;:23;29659:7;29644:14;:23::i;:::-;:31;;;29636:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29754:1;29740:16;;:2;:16;;;;29732:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29810:39;29831:4;29837:2;29841:7;29810:20;:39::i;:::-;29914:29;29931:1;29935:7;29914:8;:29::i;:::-;29975:1;29956:9;:15;29966:4;29956:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30004:1;29987:9;:13;29997:2;29987:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30035:2;30016:7;:16;30024:7;30016:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30074:7;30070:2;30055:27;;30064:4;30055:27;;;;;;;;;;;;29512:578;;;:::o;33166:136::-;33224:7;33251:43;33255:1;33258;33251:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;33244:50;;33166:136;;;;:::o;47399:173::-;47455:16;47474:6;;;;;;;;;;;47455:25;;47500:8;47491:6;;:17;;;;;;;;;;;;;;;;;;47555:8;47524:40;;47545:8;47524:40;;;;;;;;;;;;47444:128;47399:173;:::o;34082:471::-;34140:7;34390:1;34385;:6;34381:47;;;34415:1;34408:8;;;;34381:47;34440:9;34456:1;34452;:5;;;;:::i;:::-;34440:17;;34485:1;34480;34476;:5;;;;:::i;:::-;:10;34468:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;34544:1;34537:8;;;34082:471;;;;;:::o;27210:110::-;27286:26;27296:2;27300:7;27286:26;;;;;;;;;;;;:9;:26::i;:::-;27210:110;;:::o;25598:315::-;25755:28;25765:4;25771:2;25775:7;25755:9;:28::i;:::-;25802:48;25825:4;25831:2;25835:7;25844:5;25802:22;:48::i;:::-;25794:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25598:315;;;;:::o;48483:151::-;48543:13;48600:10;48611:13;48583:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48569:57;;48483:151;:::o;18887:157::-;18972:4;19011:25;18996:40;;;:11;:40;;;;18989:47;;18887:157;;;:::o;40852:589::-;40996:45;41023:4;41029:2;41033:7;40996:26;:45::i;:::-;41074:1;41058:18;;:4;:18;;;41054:187;;;41093:40;41125:7;41093:31;:40::i;:::-;41054:187;;;41163:2;41155:10;;:4;:10;;;41151:90;;41182:47;41215:4;41221:7;41182:32;:47::i;:::-;41151:90;41054:187;41269:1;41255:16;;:2;:16;;;41251:183;;;41288:45;41325:7;41288:36;:45::i;:::-;41251:183;;;41361:4;41355:10;;:2;:10;;;41351:83;;41382:40;41410:2;41414:7;41382:27;:40::i;:::-;41351:83;41251:183;40852:589;;;:::o;33639:192::-;33725:7;33758:1;33753;:6;;33761:12;33745:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;33785:9;33801:1;33797;:5;;;;:::i;:::-;33785:17;;33822:1;33815:8;;;33639:192;;;;;:::o;27547:321::-;27677:18;27683:2;27687:7;27677:5;:18::i;:::-;27728:54;27759:1;27763:2;27767:7;27776:5;27728:22;:54::i;:::-;27706:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27547:321;;;:::o;30947:803::-;31102:4;31123:15;:2;:13;;;:15::i;:::-;31119:624;;;31175:2;31159:36;;;31196:12;:10;:12::i;:::-;31210:4;31216:7;31225:5;31159:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31155:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31422:1;31405:6;:13;:18;31401:272;;;31448:60;;;;;;;;;;:::i;:::-;;;;;;;;31401:272;31623:6;31617:13;31608:6;31604:2;31600:15;31593:38;31155:533;31292:45;;;31282:55;;;:6;:55;;;;31275:62;;;;;31119:624;31727:4;31720:11;;30947:803;;;;;;;:::o;32322:126::-;;;;:::o;42164:164::-;42268:10;:17;;;;42241:15;:24;42257:7;42241:24;;;;;;;;;;;:44;;;;42296:10;42312:7;42296:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42164:164;:::o;42955:988::-;43221:22;43271:1;43246:22;43263:4;43246:16;:22::i;:::-;:26;;;;:::i;:::-;43221:51;;43283:18;43304:17;:26;43322:7;43304:26;;;;;;;;;;;;43283:47;;43451:14;43437:10;:28;43433:328;;43482:19;43504:12;:18;43517:4;43504:18;;;;;;;;;;;;;;;:34;43523:14;43504:34;;;;;;;;;;;;43482:56;;43588:11;43555:12;:18;43568:4;43555:18;;;;;;;;;;;;;;;:30;43574:10;43555:30;;;;;;;;;;;:44;;;;43705:10;43672:17;:30;43690:11;43672:30;;;;;;;;;;;:43;;;;43467:294;43433:328;43857:17;:26;43875:7;43857:26;;;;;;;;;;;43850:33;;;43901:12;:18;43914:4;43901:18;;;;;;;;;;;;;;;:34;43920:14;43901:34;;;;;;;;;;;43894:41;;;43036:907;;42955:988;;:::o;44238:1079::-;44491:22;44536:1;44516:10;:17;;;;:21;;;;:::i;:::-;44491:46;;44548:18;44569:15;:24;44585:7;44569:24;;;;;;;;;;;;44548:45;;44920:19;44942:10;44953:14;44942:26;;;;;;;;:::i;:::-;;;;;;;;;;44920:48;;45006:11;44981:10;44992;44981:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45117:10;45086:15;:28;45102:11;45086:28;;;;;;;;;;;:41;;;;45258:15;:24;45274:7;45258:24;;;;;;;;;;;45251:31;;;45293:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44309:1008;;;44238:1079;:::o;41742:221::-;41827:14;41844:20;41861:2;41844:16;:20::i;:::-;41827:37;;41902:7;41875:12;:16;41888:2;41875:16;;;;;;;;;;;;;;;:24;41892:6;41875:24;;;;;;;;;;;:34;;;;41949:6;41920:17;:26;41938:7;41920:26;;;;;;;;;;;:35;;;;41816:147;41742:221;;:::o;28204:382::-;28298:1;28284:16;;:2;:16;;;;28276:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28357:16;28365:7;28357;:16::i;:::-;28356:17;28348:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28419:45;28448:1;28452:2;28456:7;28419:20;:45::i;:::-;28494:1;28477:9;:13;28487:2;28477:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28525:2;28506:7;:16;28514:7;28506:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28570:7;28566:2;28545:33;;28562:1;28545:33;;;;;;;;;;;;28204:382;;:::o;8132:387::-;8192:4;8400:12;8467:7;8455:20;8447:28;;8510:1;8503:4;:8;8496:15;;;8132:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:114::-;6317:6;6351:5;6345:12;6335:22;;6250:114;;;:::o;6370:184::-;6469:11;6503:6;6498:3;6491:19;6543:4;6538:3;6534:14;6519:29;;6370:184;;;;:::o;6560:132::-;6627:4;6650:3;6642:11;;6680:4;6675:3;6671:14;6663:22;;6560:132;;;:::o;6698:108::-;6775:24;6793:5;6775:24;:::i;:::-;6770:3;6763:37;6698:108;;:::o;6812:179::-;6881:10;6902:46;6944:3;6936:6;6902:46;:::i;:::-;6980:4;6975:3;6971:14;6957:28;;6812:179;;;;:::o;6997:113::-;7067:4;7099;7094:3;7090:14;7082:22;;6997:113;;;:::o;7146:732::-;7265:3;7294:54;7342:5;7294:54;:::i;:::-;7364:86;7443:6;7438:3;7364:86;:::i;:::-;7357:93;;7474:56;7524:5;7474:56;:::i;:::-;7553:7;7584:1;7569:284;7594:6;7591:1;7588:13;7569:284;;;7670:6;7664:13;7697:63;7756:3;7741:13;7697:63;:::i;:::-;7690:70;;7783:60;7836:6;7783:60;:::i;:::-;7773:70;;7629:224;7616:1;7613;7609:9;7604:14;;7569:284;;;7573:14;7869:3;7862:10;;7270:608;;;7146:732;;;;:::o;7884:373::-;8027:4;8065:2;8054:9;8050:18;8042:26;;8114:9;8108:4;8104:20;8100:1;8089:9;8085:17;8078:47;8142:108;8245:4;8236:6;8142:108;:::i;:::-;8134:116;;7884:373;;;;:::o;8263:117::-;8372:1;8369;8362:12;8386:117;8495:1;8492;8485:12;8509:180;8557:77;8554:1;8547:88;8654:4;8651:1;8644:15;8678:4;8675:1;8668:15;8695:281;8778:27;8800:4;8778:27;:::i;:::-;8770:6;8766:40;8908:6;8896:10;8893:22;8872:18;8860:10;8857:34;8854:62;8851:88;;;8919:18;;:::i;:::-;8851:88;8959:10;8955:2;8948:22;8738:238;8695:281;;:::o;8982:129::-;9016:6;9043:20;;:::i;:::-;9033:30;;9072:33;9100:4;9092:6;9072:33;:::i;:::-;8982:129;;;:::o;9117:308::-;9179:4;9269:18;9261:6;9258:30;9255:56;;;9291:18;;:::i;:::-;9255:56;9329:29;9351:6;9329:29;:::i;:::-;9321:37;;9413:4;9407;9403:15;9395:23;;9117:308;;;:::o;9431:154::-;9515:6;9510:3;9505;9492:30;9577:1;9568:6;9563:3;9559:16;9552:27;9431:154;;;:::o;9591:412::-;9669:5;9694:66;9710:49;9752:6;9710:49;:::i;:::-;9694:66;:::i;:::-;9685:75;;9783:6;9776:5;9769:21;9821:4;9814:5;9810:16;9859:3;9850:6;9845:3;9841:16;9838:25;9835:112;;;9866:79;;:::i;:::-;9835:112;9956:41;9990:6;9985:3;9980;9956:41;:::i;:::-;9675:328;9591:412;;;;;:::o;10023:340::-;10079:5;10128:3;10121:4;10113:6;10109:17;10105:27;10095:122;;10136:79;;:::i;:::-;10095:122;10253:6;10240:20;10278:79;10353:3;10345:6;10338:4;10330:6;10326:17;10278:79;:::i;:::-;10269:88;;10085:278;10023:340;;;;:::o;10369:509::-;10438:6;10487:2;10475:9;10466:7;10462:23;10458:32;10455:119;;;10493:79;;:::i;:::-;10455:119;10641:1;10630:9;10626:17;10613:31;10671:18;10663:6;10660:30;10657:117;;;10693:79;;:::i;:::-;10657:117;10798:63;10853:7;10844:6;10833:9;10829:22;10798:63;:::i;:::-;10788:73;;10584:287;10369:509;;;;:::o;10884:116::-;10954:21;10969:5;10954:21;:::i;:::-;10947:5;10944:32;10934:60;;10990:1;10987;10980:12;10934:60;10884:116;:::o;11006:133::-;11049:5;11087:6;11074:20;11065:29;;11103:30;11127:5;11103:30;:::i;:::-;11006:133;;;;:::o;11145:468::-;11210:6;11218;11267:2;11255:9;11246:7;11242:23;11238:32;11235:119;;;11273:79;;:::i;:::-;11235:119;11393:1;11418:53;11463:7;11454:6;11443:9;11439:22;11418:53;:::i;:::-;11408:63;;11364:117;11520:2;11546:50;11588:7;11579:6;11568:9;11564:22;11546:50;:::i;:::-;11536:60;;11491:115;11145:468;;;;;:::o;11619:307::-;11680:4;11770:18;11762:6;11759:30;11756:56;;;11792:18;;:::i;:::-;11756:56;11830:29;11852:6;11830:29;:::i;:::-;11822:37;;11914:4;11908;11904:15;11896:23;;11619:307;;;:::o;11932:410::-;12009:5;12034:65;12050:48;12091:6;12050:48;:::i;:::-;12034:65;:::i;:::-;12025:74;;12122:6;12115:5;12108:21;12160:4;12153:5;12149:16;12198:3;12189:6;12184:3;12180:16;12177:25;12174:112;;;12205:79;;:::i;:::-;12174:112;12295:41;12329:6;12324:3;12319;12295:41;:::i;:::-;12015:327;11932:410;;;;;:::o;12361:338::-;12416:5;12465:3;12458:4;12450:6;12446:17;12442:27;12432:122;;12473:79;;:::i;:::-;12432:122;12590:6;12577:20;12615:78;12689:3;12681:6;12674:4;12666:6;12662:17;12615:78;:::i;:::-;12606:87;;12422:277;12361:338;;;;:::o;12705:943::-;12800:6;12808;12816;12824;12873:3;12861:9;12852:7;12848:23;12844:33;12841:120;;;12880:79;;:::i;:::-;12841:120;13000:1;13025:53;13070:7;13061:6;13050:9;13046:22;13025:53;:::i;:::-;13015:63;;12971:117;13127:2;13153:53;13198:7;13189:6;13178:9;13174:22;13153:53;:::i;:::-;13143:63;;13098:118;13255:2;13281:53;13326:7;13317:6;13306:9;13302:22;13281:53;:::i;:::-;13271:63;;13226:118;13411:2;13400:9;13396:18;13383:32;13442:18;13434:6;13431:30;13428:117;;;13464:79;;:::i;:::-;13428:117;13569:62;13623:7;13614:6;13603:9;13599:22;13569:62;:::i;:::-;13559:72;;13354:287;12705:943;;;;;;;:::o;13654:474::-;13722:6;13730;13779:2;13767:9;13758:7;13754:23;13750:32;13747:119;;;13785:79;;:::i;:::-;13747:119;13905:1;13930:53;13975:7;13966:6;13955:9;13951:22;13930:53;:::i;:::-;13920:63;;13876:117;14032:2;14058:53;14103:7;14094:6;14083:9;14079:22;14058:53;:::i;:::-;14048:63;;14003:118;13654:474;;;;;:::o;14134:180::-;14182:77;14179:1;14172:88;14279:4;14276:1;14269:15;14303:4;14300:1;14293:15;14320:320;14364:6;14401:1;14395:4;14391:12;14381:22;;14448:1;14442:4;14438:12;14469:18;14459:81;;14525:4;14517:6;14513:17;14503:27;;14459:81;14587:2;14579:6;14576:14;14556:18;14553:38;14550:84;;;14606:18;;:::i;:::-;14550:84;14371:269;14320:320;;;:::o;14646:231::-;14786:34;14782:1;14774:6;14770:14;14763:58;14855:14;14850:2;14842:6;14838:15;14831:39;14646:231;:::o;14883:366::-;15025:3;15046:67;15110:2;15105:3;15046:67;:::i;:::-;15039:74;;15122:93;15211:3;15122:93;:::i;:::-;15240:2;15235:3;15231:12;15224:19;;14883:366;;;:::o;15255:419::-;15421:4;15459:2;15448:9;15444:18;15436:26;;15508:9;15502:4;15498:20;15494:1;15483:9;15479:17;15472:47;15536:131;15662:4;15536:131;:::i;:::-;15528:139;;15255:419;;;:::o;15680:220::-;15820:34;15816:1;15808:6;15804:14;15797:58;15889:3;15884:2;15876:6;15872:15;15865:28;15680:220;:::o;15906:366::-;16048:3;16069:67;16133:2;16128:3;16069:67;:::i;:::-;16062:74;;16145:93;16234:3;16145:93;:::i;:::-;16263:2;16258:3;16254:12;16247:19;;15906:366;;;:::o;16278:419::-;16444:4;16482:2;16471:9;16467:18;16459:26;;16531:9;16525:4;16521:20;16517:1;16506:9;16502:17;16495:47;16559:131;16685:4;16559:131;:::i;:::-;16551:139;;16278:419;;;:::o;16703:243::-;16843:34;16839:1;16831:6;16827:14;16820:58;16912:26;16907:2;16899:6;16895:15;16888:51;16703:243;:::o;16952:366::-;17094:3;17115:67;17179:2;17174:3;17115:67;:::i;:::-;17108:74;;17191:93;17280:3;17191:93;:::i;:::-;17309:2;17304:3;17300:12;17293:19;;16952:366;;;:::o;17324:419::-;17490:4;17528:2;17517:9;17513:18;17505:26;;17577:9;17571:4;17567:20;17563:1;17552:9;17548:17;17541:47;17605:131;17731:4;17605:131;:::i;:::-;17597:139;;17324:419;;;:::o;17749:182::-;17889:34;17885:1;17877:6;17873:14;17866:58;17749:182;:::o;17937:366::-;18079:3;18100:67;18164:2;18159:3;18100:67;:::i;:::-;18093:74;;18176:93;18265:3;18176:93;:::i;:::-;18294:2;18289:3;18285:12;18278:19;;17937:366;;;:::o;18309:419::-;18475:4;18513:2;18502:9;18498:18;18490:26;;18562:9;18556:4;18552:20;18548:1;18537:9;18533:17;18526:47;18590:131;18716:4;18590:131;:::i;:::-;18582:139;;18309:419;;;:::o;18734:236::-;18874:34;18870:1;18862:6;18858:14;18851:58;18943:19;18938:2;18930:6;18926:15;18919:44;18734:236;:::o;18976:366::-;19118:3;19139:67;19203:2;19198:3;19139:67;:::i;:::-;19132:74;;19215:93;19304:3;19215:93;:::i;:::-;19333:2;19328:3;19324:12;19317:19;;18976:366;;;:::o;19348:419::-;19514:4;19552:2;19541:9;19537:18;19529:26;;19601:9;19595:4;19591:20;19587:1;19576:9;19572:17;19565:47;19629:131;19755:4;19629:131;:::i;:::-;19621:139;;19348:419;;;:::o;19773:230::-;19913:34;19909:1;19901:6;19897:14;19890:58;19982:13;19977:2;19969:6;19965:15;19958:38;19773:230;:::o;20009:366::-;20151:3;20172:67;20236:2;20231:3;20172:67;:::i;:::-;20165:74;;20248:93;20337:3;20248:93;:::i;:::-;20366:2;20361:3;20357:12;20350:19;;20009:366;;;:::o;20381:419::-;20547:4;20585:2;20574:9;20570:18;20562:26;;20634:9;20628:4;20624:20;20620:1;20609:9;20605:17;20598:47;20662:131;20788:4;20662:131;:::i;:::-;20654:139;;20381:419;;;:::o;20806:180::-;20854:77;20851:1;20844:88;20951:4;20948:1;20941:15;20975:4;20972:1;20965:15;20992:180;21040:77;21037:1;21030:88;21137:4;21134:1;21127:15;21161:4;21158:1;21151:15;21178:233;21217:3;21240:24;21258:5;21240:24;:::i;:::-;21231:33;;21286:66;21279:5;21276:77;21273:103;;;21356:18;;:::i;:::-;21273:103;21403:1;21396:5;21392:13;21385:20;;21178:233;;;:::o;21417:231::-;21557:34;21553:1;21545:6;21541:14;21534:58;21626:14;21621:2;21613:6;21609:15;21602:39;21417:231;:::o;21654:366::-;21796:3;21817:67;21881:2;21876:3;21817:67;:::i;:::-;21810:74;;21893:93;21982:3;21893:93;:::i;:::-;22011:2;22006:3;22002:12;21995:19;;21654:366;;;:::o;22026:419::-;22192:4;22230:2;22219:9;22215:18;22207:26;;22279:9;22273:4;22269:20;22265:1;22254:9;22250:17;22243:47;22307:131;22433:4;22307:131;:::i;:::-;22299:139;;22026:419;;;:::o;22451:228::-;22591:34;22587:1;22579:6;22575:14;22568:58;22660:11;22655:2;22647:6;22643:15;22636:36;22451:228;:::o;22685:366::-;22827:3;22848:67;22912:2;22907:3;22848:67;:::i;:::-;22841:74;;22924:93;23013:3;22924:93;:::i;:::-;23042:2;23037:3;23033:12;23026:19;;22685:366;;;:::o;23057:419::-;23223:4;23261:2;23250:9;23246:18;23238:26;;23310:9;23304:4;23300:20;23296:1;23285:9;23281:17;23274:47;23338:131;23464:4;23338:131;:::i;:::-;23330:139;;23057:419;;;:::o;23482:229::-;23622:34;23618:1;23610:6;23606:14;23599:58;23691:12;23686:2;23678:6;23674:15;23667:37;23482:229;:::o;23717:366::-;23859:3;23880:67;23944:2;23939:3;23880:67;:::i;:::-;23873:74;;23956:93;24045:3;23956:93;:::i;:::-;24074:2;24069:3;24065:12;24058:19;;23717:366;;;:::o;24089:419::-;24255:4;24293:2;24282:9;24278:18;24270:26;;24342:9;24336:4;24332:20;24328:1;24317:9;24313:17;24306:47;24370:131;24496:4;24370:131;:::i;:::-;24362:139;;24089:419;;;:::o;24514:171::-;24654:23;24650:1;24642:6;24638:14;24631:47;24514:171;:::o;24691:366::-;24833:3;24854:67;24918:2;24913:3;24854:67;:::i;:::-;24847:74;;24930:93;25019:3;24930:93;:::i;:::-;25048:2;25043:3;25039:12;25032:19;;24691:366;;;:::o;25063:419::-;25229:4;25267:2;25256:9;25252:18;25244:26;;25316:9;25310:4;25306:20;25302:1;25291:9;25287:17;25280:47;25344:131;25470:4;25344:131;:::i;:::-;25336:139;;25063:419;;;:::o;25488:179::-;25628:31;25624:1;25616:6;25612:14;25605:55;25488:179;:::o;25673:366::-;25815:3;25836:67;25900:2;25895:3;25836:67;:::i;:::-;25829:74;;25912:93;26001:3;25912:93;:::i;:::-;26030:2;26025:3;26021:12;26014:19;;25673:366;;;:::o;26045:419::-;26211:4;26249:2;26238:9;26234:18;26226:26;;26298:9;26292:4;26288:20;26284:1;26273:9;26269:17;26262:47;26326:131;26452:4;26326:131;:::i;:::-;26318:139;;26045:419;;;:::o;26470:305::-;26510:3;26529:20;26547:1;26529:20;:::i;:::-;26524:25;;26563:20;26581:1;26563:20;:::i;:::-;26558:25;;26717:1;26649:66;26645:74;26642:1;26639:81;26636:107;;;26723:18;;:::i;:::-;26636:107;26767:1;26764;26760:9;26753:16;;26470:305;;;;:::o;26781:224::-;26921:34;26917:1;26909:6;26905:14;26898:58;26990:7;26985:2;26977:6;26973:15;26966:32;26781:224;:::o;27011:366::-;27153:3;27174:67;27238:2;27233:3;27174:67;:::i;:::-;27167:74;;27250:93;27339:3;27250:93;:::i;:::-;27368:2;27363:3;27359:12;27352:19;;27011:366;;;:::o;27383:419::-;27549:4;27587:2;27576:9;27572:18;27564:26;;27636:9;27630:4;27626:20;27622:1;27611:9;27607:17;27600:47;27664:131;27790:4;27664:131;:::i;:::-;27656:139;;27383:419;;;:::o;27808:180::-;27948:32;27944:1;27936:6;27932:14;27925:56;27808:180;:::o;27994:366::-;28136:3;28157:67;28221:2;28216:3;28157:67;:::i;:::-;28150:74;;28233:93;28322:3;28233:93;:::i;:::-;28351:2;28346:3;28342:12;28335:19;;27994:366;;;:::o;28366:419::-;28532:4;28570:2;28559:9;28555:18;28547:26;;28619:9;28613:4;28609:20;28605:1;28594:9;28590:17;28583:47;28647:131;28773:4;28647:131;:::i;:::-;28639:139;;28366:419;;;:::o;28791:251::-;28931:34;28927:1;28919:6;28915:14;28908:58;29000:34;28995:2;28987:6;28983:15;28976:59;28791:251;:::o;29048:366::-;29190:3;29211:67;29275:2;29270:3;29211:67;:::i;:::-;29204:74;;29287:93;29376:3;29287:93;:::i;:::-;29405:2;29400:3;29396:12;29389:19;;29048:366;;;:::o;29420:419::-;29586:4;29624:2;29613:9;29609:18;29601:26;;29673:9;29667:4;29663:20;29659:1;29648:9;29644:17;29637:47;29701:131;29827:4;29701:131;:::i;:::-;29693:139;;29420:419;;;:::o;29845:175::-;29985:27;29981:1;29973:6;29969:14;29962:51;29845:175;:::o;30026:366::-;30168:3;30189:67;30253:2;30248:3;30189:67;:::i;:::-;30182:74;;30265:93;30354:3;30265:93;:::i;:::-;30383:2;30378:3;30374:12;30367:19;;30026:366;;;:::o;30398:419::-;30564:4;30602:2;30591:9;30587:18;30579:26;;30651:9;30645:4;30641:20;30637:1;30626:9;30622:17;30615:47;30679:131;30805:4;30679:131;:::i;:::-;30671:139;;30398:419;;;:::o;30823:234::-;30963:34;30959:1;30951:6;30947:14;30940:58;31032:17;31027:2;31019:6;31015:15;31008:42;30823:234;:::o;31063:366::-;31205:3;31226:67;31290:2;31285:3;31226:67;:::i;:::-;31219:74;;31302:93;31391:3;31302:93;:::i;:::-;31420:2;31415:3;31411:12;31404:19;;31063:366;;;:::o;31435:419::-;31601:4;31639:2;31628:9;31624:18;31616:26;;31688:9;31682:4;31678:20;31674:1;31663:9;31659:17;31652:47;31716:131;31842:4;31716:131;:::i;:::-;31708:139;;31435:419;;;:::o;31860:148::-;31962:11;31999:3;31984:18;;31860:148;;;;:::o;32014:377::-;32120:3;32148:39;32181:5;32148:39;:::i;:::-;32203:89;32285:6;32280:3;32203:89;:::i;:::-;32196:96;;32301:52;32346:6;32341:3;32334:4;32327:5;32323:16;32301:52;:::i;:::-;32378:6;32373:3;32369:16;32362:23;;32124:267;32014:377;;;;:::o;32397:275::-;32529:3;32551:95;32642:3;32633:6;32551:95;:::i;:::-;32544:102;;32663:3;32656:10;;32397:275;;;;:::o;32678:225::-;32818:34;32814:1;32806:6;32802:14;32795:58;32887:8;32882:2;32874:6;32870:15;32863:33;32678:225;:::o;32909:366::-;33051:3;33072:67;33136:2;33131:3;33072:67;:::i;:::-;33065:74;;33148:93;33237:3;33148:93;:::i;:::-;33266:2;33261:3;33257:12;33250:19;;32909:366;;;:::o;33281:419::-;33447:4;33485:2;33474:9;33470:18;33462:26;;33534:9;33528:4;33524:20;33520:1;33509:9;33505:17;33498:47;33562:131;33688:4;33562:131;:::i;:::-;33554:139;;33281:419;;;:::o;33706:231::-;33846:34;33842:1;33834:6;33830:14;33823:58;33915:14;33910:2;33902:6;33898:15;33891:39;33706:231;:::o;33943:366::-;34085:3;34106:67;34170:2;34165:3;34106:67;:::i;:::-;34099:74;;34182:93;34271:3;34182:93;:::i;:::-;34300:2;34295:3;34291:12;34284:19;;33943:366;;;:::o;34315:419::-;34481:4;34519:2;34508:9;34504:18;34496:26;;34568:9;34562:4;34558:20;34554:1;34543:9;34539:17;34532:47;34596:131;34722:4;34596:131;:::i;:::-;34588:139;;34315:419;;;:::o;34740:228::-;34880:34;34876:1;34868:6;34864:14;34857:58;34949:11;34944:2;34936:6;34932:15;34925:36;34740:228;:::o;34974:366::-;35116:3;35137:67;35201:2;35196:3;35137:67;:::i;:::-;35130:74;;35213:93;35302:3;35213:93;:::i;:::-;35331:2;35326:3;35322:12;35315:19;;34974:366;;;:::o;35346:419::-;35512:4;35550:2;35539:9;35535:18;35527:26;;35599:9;35593:4;35589:20;35585:1;35574:9;35570:17;35563:47;35627:131;35753:4;35627:131;:::i;:::-;35619:139;;35346:419;;;:::o;35771:223::-;35911:34;35907:1;35899:6;35895:14;35888:58;35980:6;35975:2;35967:6;35963:15;35956:31;35771:223;:::o;36000:366::-;36142:3;36163:67;36227:2;36222:3;36163:67;:::i;:::-;36156:74;;36239:93;36328:3;36239:93;:::i;:::-;36357:2;36352:3;36348:12;36341:19;;36000:366;;;:::o;36372:419::-;36538:4;36576:2;36565:9;36561:18;36553:26;;36625:9;36619:4;36615:20;36611:1;36600:9;36596:17;36589:47;36653:131;36779:4;36653:131;:::i;:::-;36645:139;;36372:419;;;:::o;36797:191::-;36837:4;36857:20;36875:1;36857:20;:::i;:::-;36852:25;;36891:20;36909:1;36891:20;:::i;:::-;36886:25;;36930:1;36927;36924:8;36921:34;;;36935:18;;:::i;:::-;36921:34;36980:1;36977;36973:9;36965:17;;36797:191;;;;:::o;36994:348::-;37034:7;37057:20;37075:1;37057:20;:::i;:::-;37052:25;;37091:20;37109:1;37091:20;:::i;:::-;37086:25;;37279:1;37211:66;37207:74;37204:1;37201:81;37196:1;37189:9;37182:17;37178:105;37175:131;;;37286:18;;:::i;:::-;37175:131;37334:1;37331;37327:9;37316:20;;36994:348;;;;:::o;37348:180::-;37396:77;37393:1;37386:88;37493:4;37490:1;37483:15;37517:4;37514:1;37507:15;37534:185;37574:1;37591:20;37609:1;37591:20;:::i;:::-;37586:25;;37625:20;37643:1;37625:20;:::i;:::-;37620:25;;37664:1;37654:35;;37669:18;;:::i;:::-;37654:35;37711:1;37708;37704:9;37699:14;;37534:185;;;;:::o;37725:220::-;37865:34;37861:1;37853:6;37849:14;37842:58;37934:3;37929:2;37921:6;37917:15;37910:28;37725:220;:::o;37951:366::-;38093:3;38114:67;38178:2;38173:3;38114:67;:::i;:::-;38107:74;;38190:93;38279:3;38190:93;:::i;:::-;38308:2;38303:3;38299:12;38292:19;;37951:366;;;:::o;38323:419::-;38489:4;38527:2;38516:9;38512:18;38504:26;;38576:9;38570:4;38566:20;38562:1;38551:9;38547:17;38540:47;38604:131;38730:4;38604:131;:::i;:::-;38596:139;;38323:419;;;:::o;38748:237::-;38888:34;38884:1;38876:6;38872:14;38865:58;38957:20;38952:2;38944:6;38940:15;38933:45;38748:237;:::o;38991:366::-;39133:3;39154:67;39218:2;39213:3;39154:67;:::i;:::-;39147:74;;39230:93;39319:3;39230:93;:::i;:::-;39348:2;39343:3;39339:12;39332:19;;38991:366;;;:::o;39363:419::-;39529:4;39567:2;39556:9;39552:18;39544:26;;39616:9;39610:4;39606:20;39602:1;39591:9;39587:17;39580:47;39644:131;39770:4;39644:131;:::i;:::-;39636:139;;39363:419;;;:::o;39788:141::-;39837:4;39860:3;39852:11;;39883:3;39880:1;39873:14;39917:4;39914:1;39904:18;39896:26;;39788:141;;;:::o;39959:845::-;40062:3;40099:5;40093:12;40128:36;40154:9;40128:36;:::i;:::-;40180:89;40262:6;40257:3;40180:89;:::i;:::-;40173:96;;40300:1;40289:9;40285:17;40316:1;40311:137;;;;40462:1;40457:341;;;;40278:520;;40311:137;40395:4;40391:9;40380;40376:25;40371:3;40364:38;40431:6;40426:3;40422:16;40415:23;;40311:137;;40457:341;40524:38;40556:5;40524:38;:::i;:::-;40584:1;40598:154;40612:6;40609:1;40606:13;40598:154;;;40686:7;40680:14;40676:1;40671:3;40667:11;40660:35;40736:1;40727:7;40723:15;40712:26;;40634:4;40631:1;40627:12;40622:17;;40598:154;;;40781:6;40776:3;40772:16;40765:23;;40464:334;;40278:520;;40066:738;;39959:845;;;;:::o;40810:423::-;40984:3;41006:92;41094:3;41085:6;41006:92;:::i;:::-;40999:99;;41115:92;41203:3;41194:6;41115:92;:::i;:::-;41108:99;;41224:3;41217:10;;40810:423;;;;;:::o;41239:98::-;41290:6;41324:5;41318:12;41308:22;;41239:98;;;:::o;41343:168::-;41426:11;41460:6;41455:3;41448:19;41500:4;41495:3;41491:14;41476:29;;41343:168;;;;:::o;41517:360::-;41603:3;41631:38;41663:5;41631:38;:::i;:::-;41685:70;41748:6;41743:3;41685:70;:::i;:::-;41678:77;;41764:52;41809:6;41804:3;41797:4;41790:5;41786:16;41764:52;:::i;:::-;41841:29;41863:6;41841:29;:::i;:::-;41836:3;41832:39;41825:46;;41607:270;41517:360;;;;:::o;41883:640::-;42078:4;42116:3;42105:9;42101:19;42093:27;;42130:71;42198:1;42187:9;42183:17;42174:6;42130:71;:::i;:::-;42211:72;42279:2;42268:9;42264:18;42255:6;42211:72;:::i;:::-;42293;42361:2;42350:9;42346:18;42337:6;42293:72;:::i;:::-;42412:9;42406:4;42402:20;42397:2;42386:9;42382:18;42375:48;42440:76;42511:4;42502:6;42440:76;:::i;:::-;42432:84;;41883:640;;;;;;;:::o;42529:141::-;42585:5;42616:6;42610:13;42601:22;;42632:32;42658:5;42632:32;:::i;:::-;42529:141;;;;:::o;42676:349::-;42745:6;42794:2;42782:9;42773:7;42769:23;42765:32;42762:119;;;42800:79;;:::i;:::-;42762:119;42920:1;42945:63;43000:7;42991:6;42980:9;42976:22;42945:63;:::i;:::-;42935:73;;42891:127;42676:349;;;;:::o;43031:180::-;43079:77;43076:1;43069:88;43176:4;43173:1;43166:15;43200:4;43197:1;43190:15;43217:182;43357:34;43353:1;43345:6;43341:14;43334:58;43217:182;:::o;43405:366::-;43547:3;43568:67;43632:2;43627:3;43568:67;:::i;:::-;43561:74;;43644:93;43733:3;43644:93;:::i;:::-;43762:2;43757:3;43753:12;43746:19;;43405:366;;;:::o;43777:419::-;43943:4;43981:2;43970:9;43966:18;43958:26;;44030:9;44024:4;44020:20;44016:1;44005:9;44001:17;43994:47;44058:131;44184:4;44058:131;:::i;:::-;44050:139;;43777:419;;;:::o;44202:178::-;44342:30;44338:1;44330:6;44326:14;44319:54;44202:178;:::o;44386:366::-;44528:3;44549:67;44613:2;44608:3;44549:67;:::i;:::-;44542:74;;44625:93;44714:3;44625:93;:::i;:::-;44743:2;44738:3;44734:12;44727:19;;44386:366;;;:::o;44758:419::-;44924:4;44962:2;44951:9;44947:18;44939:26;;45011:9;45005:4;45001:20;44997:1;44986:9;44982:17;44975:47;45039:131;45165:4;45039:131;:::i;:::-;45031:139;;44758:419;;;:::o

Swarm Source

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