ETH Price: $3,487.19 (+3.44%)
Gas: 4 Gwei

Token

 

Overview

Max Total Supply

184

Holders

184

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
zerf0.eth
0x9862FD5b8dbFbe4e887d244d28e53D792dED66EB
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:
WakweliAlpha2Passes

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-12
*/

// File: @openzeppelin/[email protected]/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/[email protected]/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(
        address[] calldata accounts,
        uint256[] calldata ids
    ) external view returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/[email protected]/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/[email protected]/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

// File: @openzeppelin/[email protected]/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     *
     * Furthermore, `isContract` will also return true if the target contract within
     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
     * which only has an effect at the end of a transaction.
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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://consensys.net/diligence/blog/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.8.0/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 functionCallWithValue(target, data, 0, "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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, 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) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

// File: @openzeppelin/[email protected]/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/[email protected]/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


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

// File: @openzeppelin/[email protected]/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: address zero is not a valid owner");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(
        address[] memory accounts,
        uint256[] memory ids
    ) public view virtual override returns (uint256[] memory) {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner or approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner or approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

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

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(address to, uint256 id, uint256 amount, bytes memory data) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

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

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(address from, uint256 id, uint256 amount) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(address from, uint256[] memory ids, uint256[] memory amounts) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

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

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

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `ids` and `amounts` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non-ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non-ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: @openzeppelin/[email protected]/token/ERC1155/extensions/ERC1155Burnable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC1155/extensions/ERC1155Burnable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(address account, uint256 id, uint256 value) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not token owner or approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not token owner or approved"
        );

        _burnBatch(account, ids, values);
    }
}

// File: @openzeppelin/[email protected]/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/[email protected]/token/ERC1155/extensions/ERC1155Supply.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;


/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                uint256 amount = amounts[i];
                uint256 supply = _totalSupply[id];
                require(supply >= amount, "ERC1155: burn amount exceeds totalSupply");
                unchecked {
                    _totalSupply[id] = supply - amount;
                }
            }
        }
    }
}

// File: WakweliAlpha2Passes.sol


pragma solidity ^0.8.9;





contract WakweliAlpha2Passes is ERC1155, ERC1155Burnable, Ownable, ERC1155Supply {
    constructor()
        ERC1155("ipfs://QmTRFR3auNV1ksAUDqr7M1HGxyCjuFvqntZKFyruvq6UGk/{id}.json")
    {}

    function contractURI() public view returns (string memory) {
        return "ipfs://QmTRFR3auNV1ksAUDqr7M1HGxyCjuFvqntZKFyruvq6UGk/collection.json";
    }

    function mint(address account, uint256 id, uint256 amount, bytes memory data)
        public
        onlyOwner
    {
        _mint(account, id, amount, data);
    }

    function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        public
        onlyOwner
    {
        _mintBatch(to, ids, amounts, data);
    }

    // The following functions are overrides required by Solidity.

    function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        internal
        override(ERC1155, ERC1155Supply)
    {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040518060600160405280603f815260200162003e11603f91396200003d816200006460201b60201c565b506200005e620000526200008060201b60201c565b6200008860201b60201c565b62000263565b80600290805190602001906200007c9291906200014e565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200015c906200022d565b90600052602060002090601f016020900481019282620001805760008555620001cc565b82601f106200019b57805160ff1916838001178555620001cc565b82800160010185558215620001cc579182015b82811115620001cb578251825591602001919060010190620001ae565b5b509050620001db9190620001df565b5090565b5b80821115620001fa576000816000905550600101620001e0565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200024657607f821691505b602082108114156200025d576200025c620001fe565b5b50919050565b613b9e80620002736000396000f3fe608060405234801561001057600080fd5b50600436106101155760003560e01c8063731133e9116100a2578063e8a3d48511610071578063e8a3d485146102ee578063e985e9c51461030c578063f242432a1461033c578063f2fde38b14610358578063f5298aca1461037457610115565b8063731133e9146102685780638da5cb5b14610284578063a22cb465146102a2578063bd85b039146102be57610115565b80632eb2c2d6116100e95780632eb2c2d6146101c65780634e1273f4146101e25780634f558e79146102125780636b20c45414610242578063715018a61461025e57610115565b8062fdd58e1461011a57806301ffc9a71461014a5780630e89341c1461017a5780631f7fdffa146101aa575b600080fd5b610134600480360381019061012f9190612435565b610390565b6040516101419190612484565b60405180910390f35b610164600480360381019061015f91906124f7565b610459565b604051610171919061253f565b60405180910390f35b610194600480360381019061018f919061255a565b61053b565b6040516101a19190612620565b60405180910390f35b6101c460048036038101906101bf919061283f565b6105cf565b005b6101e060048036038101906101db91906128fa565b6105e9565b005b6101fc60048036038101906101f79190612a8c565b61068a565b6040516102099190612bc2565b60405180910390f35b61022c6004803603810190610227919061255a565b6107a3565b604051610239919061253f565b60405180910390f35b61025c60048036038101906102579190612be4565b6107b7565b005b610266610854565b005b610282600480360381019061027d9190612c6f565b610868565b005b61028c610882565b6040516102999190612d01565b60405180910390f35b6102bc60048036038101906102b79190612d48565b6108ac565b005b6102d860048036038101906102d3919061255a565b6108c2565b6040516102e59190612484565b60405180910390f35b6102f66108df565b6040516103039190612620565b60405180910390f35b61032660048036038101906103219190612d88565b6108ff565b604051610333919061253f565b60405180910390f35b61035660048036038101906103519190612dc8565b610993565b005b610372600480360381019061036d9190612e5f565b610a34565b005b61038e60048036038101906103899190612e8c565b610ab8565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f890612f51565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061052457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610534575061053382610b55565b5b9050919050565b60606002805461054a90612fa0565b80601f016020809104026020016040519081016040528092919081815260200182805461057690612fa0565b80156105c35780601f10610598576101008083540402835291602001916105c3565b820191906000526020600020905b8154815290600101906020018083116105a657829003601f168201915b50505050509050919050565b6105d7610bbf565b6105e384848484610c3d565b50505050565b6105f1610e6a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610637575061063685610631610e6a565b6108ff565b5b610676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066d90613044565b60405180910390fd5b6106838585858585610e72565b5050505050565b606081518351146106d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c7906130d6565b60405180910390fd5b6000835167ffffffffffffffff8111156106ed576106ec612647565b5b60405190808252806020026020018201604052801561071b5781602001602082028036833780820191505090505b50905060005b8451811015610798576107688582815181106107405761073f6130f6565b5b602002602001015185838151811061075b5761075a6130f6565b5b6020026020010151610390565b82828151811061077b5761077a6130f6565b5b6020026020010181815250508061079190613154565b9050610721565b508091505092915050565b6000806107af836108c2565b119050919050565b6107bf610e6a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806108055750610804836107ff610e6a565b6108ff565b5b610844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083b90613044565b60405180910390fd5b61084f838383611194565b505050565b61085c610bbf565b6108666000611463565b565b610870610bbf565b61087c84848484611529565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108be6108b7610e6a565b83836116da565b5050565b600060046000838152602001908152602001600020549050919050565b6060604051806080016040528060458152602001613b2460459139905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61099b610e6a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109e157506109e0856109db610e6a565b6108ff565b5b610a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1790613044565b60405180910390fd5b610a2d8585858585611847565b5050505050565b610a3c610bbf565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa39061320f565b60405180910390fd5b610ab581611463565b50565b610ac0610e6a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b065750610b0583610b00610e6a565b6108ff565b5b610b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3c90613044565b60405180910390fd5b610b50838383611ae3565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610bc7610e6a565b73ffffffffffffffffffffffffffffffffffffffff16610be5610882565b73ffffffffffffffffffffffffffffffffffffffff1614610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c329061327b565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca49061330d565b60405180910390fd5b8151835114610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce89061339f565b60405180910390fd5b6000610cfb610e6a565b9050610d0c81600087878787611d2a565b60005b8451811015610dc557838181518110610d2b57610d2a6130f6565b5b6020026020010151600080878481518110610d4957610d486130f6565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610dab91906133bf565b925050819055508080610dbd90613154565b915050610d0f565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e3d929190613415565b60405180910390a4610e5481600087878787611d40565b610e6381600087878787611d48565b5050505050565b600033905090565b8151835114610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead9061339f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d906134be565b60405180910390fd5b6000610f30610e6a565b9050610f40818787878787611d2a565b60005b84518110156110f1576000858281518110610f6157610f606130f6565b5b602002602001015190506000858381518110610f8057610f7f6130f6565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101890613550565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110d691906133bf565b92505081905550505050806110ea90613154565b9050610f43565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611168929190613415565b60405180910390a461117e818787878787611d40565b61118c818787878787611d48565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fb906135e2565b60405180910390fd5b8051825114611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f9061339f565b60405180910390fd5b6000611252610e6a565b905061127281856000868660405180602001604052806000815250611d2a565b60005b83518110156113bf576000848281518110611293576112926130f6565b5b6020026020010151905060008483815181106112b2576112b16130f6565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90613674565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806113b790613154565b915050611275565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611437929190613415565b60405180910390a461145d81856000868660405180602001604052806000815250611d40565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611599576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115909061330d565b60405180910390fd5b60006115a3610e6a565b905060006115b085611f2f565b905060006115bd85611f2f565b90506115ce83600089858589611d2a565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461162d91906133bf565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516116ab929190613694565b60405180910390a46116c283600089858589611d40565b6116d183600089898989611fa9565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611749576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117409061372f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161183a919061253f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ae906134be565b60405180910390fd5b60006118c1610e6a565b905060006118ce85611f2f565b905060006118db85611f2f565b90506118eb838989858589611d2a565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197990613550565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a3791906133bf565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611ab4929190613694565b60405180910390a4611aca848a8a86868a611d40565b611ad8848a8a8a8a8a611fa9565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a906135e2565b60405180910390fd5b6000611b5d610e6a565b90506000611b6a84611f2f565b90506000611b7784611f2f565b9050611b9783876000858560405180602001604052806000815250611d2a565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2590613674565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611cfb929190613694565b60405180910390a4611d2184886000868660405180602001604052806000815250611d40565b50505050505050565b611d38868686868686612190565b505050505050565b505050505050565b611d678473ffffffffffffffffffffffffffffffffffffffff16612362565b15611f27578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611dad9594939291906137a4565b602060405180830381600087803b158015611dc757600080fd5b505af1925050508015611df857506040513d601f19601f82011682018060405250810190611df59190613821565b60015b611e9e57611e0461385b565b806308c379a01415611e615750611e1961387d565b80611e245750611e63565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e589190612620565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9590613985565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c90613a17565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611f4e57611f4d612647565b5b604051908082528060200260200182016040528015611f7c5781602001602082028036833780820191505090505b5090508281600081518110611f9457611f936130f6565b5b60200260200101818152505080915050919050565b611fc88473ffffffffffffffffffffffffffffffffffffffff16612362565b15612188578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161200e959493929190613a37565b602060405180830381600087803b15801561202857600080fd5b505af192505050801561205957506040513d601f19601f820116820180604052508101906120569190613821565b60015b6120ff5761206561385b565b806308c379a014156120c2575061207a61387d565b8061208557506120c4565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b99190612620565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f690613985565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217d90613a17565b60405180910390fd5b505b505050505050565b61219e868686868686612385565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156122505760005b835181101561224e578281815181106121f2576121f16130f6565b5b602002602001015160046000868481518110612211576122106130f6565b5b60200260200101518152602001908152602001600020600082825461223691906133bf565b925050819055508061224790613154565b90506121d6565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561235a5760005b83518110156123585760008482815181106122a6576122a56130f6565b5b6020026020010151905060008483815181106122c5576122c46130f6565b5b602002602001015190506000600460008481526020019081526020016000205490508181101561232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232190613b03565b60405180910390fd5b81810360046000858152602001908152602001600020819055505050508061235190613154565b9050612288565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123cc826123a1565b9050919050565b6123dc816123c1565b81146123e757600080fd5b50565b6000813590506123f9816123d3565b92915050565b6000819050919050565b612412816123ff565b811461241d57600080fd5b50565b60008135905061242f81612409565b92915050565b6000806040838503121561244c5761244b612397565b5b600061245a858286016123ea565b925050602061246b85828601612420565b9150509250929050565b61247e816123ff565b82525050565b60006020820190506124996000830184612475565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124d48161249f565b81146124df57600080fd5b50565b6000813590506124f1816124cb565b92915050565b60006020828403121561250d5761250c612397565b5b600061251b848285016124e2565b91505092915050565b60008115159050919050565b61253981612524565b82525050565b60006020820190506125546000830184612530565b92915050565b6000602082840312156125705761256f612397565b5b600061257e84828501612420565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156125c15780820151818401526020810190506125a6565b838111156125d0576000848401525b50505050565b6000601f19601f8301169050919050565b60006125f282612587565b6125fc8185612592565b935061260c8185602086016125a3565b612615816125d6565b840191505092915050565b6000602082019050818103600083015261263a81846125e7565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61267f826125d6565b810181811067ffffffffffffffff8211171561269e5761269d612647565b5b80604052505050565b60006126b161238d565b90506126bd8282612676565b919050565b600067ffffffffffffffff8211156126dd576126dc612647565b5b602082029050602081019050919050565b600080fd5b6000612706612701846126c2565b6126a7565b90508083825260208201905060208402830185811115612729576127286126ee565b5b835b81811015612752578061273e8882612420565b84526020840193505060208101905061272b565b5050509392505050565b600082601f83011261277157612770612642565b5b81356127818482602086016126f3565b91505092915050565b600080fd5b600067ffffffffffffffff8211156127aa576127a9612647565b5b6127b3826125d6565b9050602081019050919050565b82818337600083830152505050565b60006127e26127dd8461278f565b6126a7565b9050828152602081018484840111156127fe576127fd61278a565b5b6128098482856127c0565b509392505050565b600082601f83011261282657612825612642565b5b81356128368482602086016127cf565b91505092915050565b6000806000806080858703121561285957612858612397565b5b6000612867878288016123ea565b945050602085013567ffffffffffffffff8111156128885761288761239c565b5b6128948782880161275c565b935050604085013567ffffffffffffffff8111156128b5576128b461239c565b5b6128c18782880161275c565b925050606085013567ffffffffffffffff8111156128e2576128e161239c565b5b6128ee87828801612811565b91505092959194509250565b600080600080600060a0868803121561291657612915612397565b5b6000612924888289016123ea565b9550506020612935888289016123ea565b945050604086013567ffffffffffffffff8111156129565761295561239c565b5b6129628882890161275c565b935050606086013567ffffffffffffffff8111156129835761298261239c565b5b61298f8882890161275c565b925050608086013567ffffffffffffffff8111156129b0576129af61239c565b5b6129bc88828901612811565b9150509295509295909350565b600067ffffffffffffffff8211156129e4576129e3612647565b5b602082029050602081019050919050565b6000612a08612a03846129c9565b6126a7565b90508083825260208201905060208402830185811115612a2b57612a2a6126ee565b5b835b81811015612a545780612a4088826123ea565b845260208401935050602081019050612a2d565b5050509392505050565b600082601f830112612a7357612a72612642565b5b8135612a838482602086016129f5565b91505092915050565b60008060408385031215612aa357612aa2612397565b5b600083013567ffffffffffffffff811115612ac157612ac061239c565b5b612acd85828601612a5e565b925050602083013567ffffffffffffffff811115612aee57612aed61239c565b5b612afa8582860161275c565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b39816123ff565b82525050565b6000612b4b8383612b30565b60208301905092915050565b6000602082019050919050565b6000612b6f82612b04565b612b798185612b0f565b9350612b8483612b20565b8060005b83811015612bb5578151612b9c8882612b3f565b9750612ba783612b57565b925050600181019050612b88565b5085935050505092915050565b60006020820190508181036000830152612bdc8184612b64565b905092915050565b600080600060608486031215612bfd57612bfc612397565b5b6000612c0b868287016123ea565b935050602084013567ffffffffffffffff811115612c2c57612c2b61239c565b5b612c388682870161275c565b925050604084013567ffffffffffffffff811115612c5957612c5861239c565b5b612c658682870161275c565b9150509250925092565b60008060008060808587031215612c8957612c88612397565b5b6000612c97878288016123ea565b9450506020612ca887828801612420565b9350506040612cb987828801612420565b925050606085013567ffffffffffffffff811115612cda57612cd961239c565b5b612ce687828801612811565b91505092959194509250565b612cfb816123c1565b82525050565b6000602082019050612d166000830184612cf2565b92915050565b612d2581612524565b8114612d3057600080fd5b50565b600081359050612d4281612d1c565b92915050565b60008060408385031215612d5f57612d5e612397565b5b6000612d6d858286016123ea565b9250506020612d7e85828601612d33565b9150509250929050565b60008060408385031215612d9f57612d9e612397565b5b6000612dad858286016123ea565b9250506020612dbe858286016123ea565b9150509250929050565b600080600080600060a08688031215612de457612de3612397565b5b6000612df2888289016123ea565b9550506020612e03888289016123ea565b9450506040612e1488828901612420565b9350506060612e2588828901612420565b925050608086013567ffffffffffffffff811115612e4657612e4561239c565b5b612e5288828901612811565b9150509295509295909350565b600060208284031215612e7557612e74612397565b5b6000612e83848285016123ea565b91505092915050565b600080600060608486031215612ea557612ea4612397565b5b6000612eb3868287016123ea565b9350506020612ec486828701612420565b9250506040612ed586828701612420565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612f3b602a83612592565b9150612f4682612edf565b604082019050919050565b60006020820190508181036000830152612f6a81612f2e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fb857607f821691505b60208210811415612fcc57612fcb612f71565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b600061302e602e83612592565b915061303982612fd2565b604082019050919050565b6000602082019050818103600083015261305d81613021565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006130c0602983612592565b91506130cb82613064565b604082019050919050565b600060208201905081810360008301526130ef816130b3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061315f826123ff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561319257613191613125565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006131f9602683612592565b91506132048261319d565b604082019050919050565b60006020820190508181036000830152613228816131ec565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613265602083612592565b91506132708261322f565b602082019050919050565b6000602082019050818103600083015261329481613258565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006132f7602183612592565b91506133028261329b565b604082019050919050565b60006020820190508181036000830152613326816132ea565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613389602883612592565b91506133948261332d565b604082019050919050565b600060208201905081810360008301526133b88161337c565b9050919050565b60006133ca826123ff565b91506133d5836123ff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561340a57613409613125565b5b828201905092915050565b6000604082019050818103600083015261342f8185612b64565b905081810360208301526134438184612b64565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134a8602583612592565b91506134b38261344c565b604082019050919050565b600060208201905081810360008301526134d78161349b565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061353a602a83612592565b9150613545826134de565b604082019050919050565b600060208201905081810360008301526135698161352d565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135cc602383612592565b91506135d782613570565b604082019050919050565b600060208201905081810360008301526135fb816135bf565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b600061365e602483612592565b915061366982613602565b604082019050919050565b6000602082019050818103600083015261368d81613651565b9050919050565b60006040820190506136a96000830185612475565b6136b66020830184612475565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613719602983612592565b9150613724826136bd565b604082019050919050565b600060208201905081810360008301526137488161370c565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006137768261374f565b613780818561375a565b93506137908185602086016125a3565b613799816125d6565b840191505092915050565b600060a0820190506137b96000830188612cf2565b6137c66020830187612cf2565b81810360408301526137d88186612b64565b905081810360608301526137ec8185612b64565b90508181036080830152613800818461376b565b90509695505050505050565b60008151905061381b816124cb565b92915050565b60006020828403121561383757613836612397565b5b60006138458482850161380c565b91505092915050565b60008160e01c9050919050565b600060033d111561387a5760046000803e61387760005161384e565b90505b90565b600060443d101561388d57613910565b61389561238d565b60043d036004823e80513d602482011167ffffffffffffffff821117156138bd575050613910565b808201805167ffffffffffffffff8111156138db5750505050613910565b80602083010160043d0385018111156138f8575050505050613910565b61390782602001850186612676565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061396f603483612592565b915061397a82613913565b604082019050919050565b6000602082019050818103600083015261399e81613962565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613a01602883612592565b9150613a0c826139a5565b604082019050919050565b60006020820190508181036000830152613a30816139f4565b9050919050565b600060a082019050613a4c6000830188612cf2565b613a596020830187612cf2565b613a666040830186612475565b613a736060830185612475565b8181036080830152613a85818461376b565b90509695505050505050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000613aed602883612592565b9150613af882613a91565b604082019050919050565b60006020820190508181036000830152613b1c81613ae0565b905091905056fe697066733a2f2f516d545246523361754e56316b734155447172374d3148477879436a754676716e745a4b4679727576713655476b2f636f6c6c656374696f6e2e6a736f6ea264697066735822122037807518e0b92b9f692665251b082343ae65cf4b9b469b9f2b462cc43e117fc564736f6c63430008090033697066733a2f2f516d545246523361754e56316b734155447172374d3148477879436a754676716e745a4b4679727576713655476b2f7b69647d2e6a736f6e

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101155760003560e01c8063731133e9116100a2578063e8a3d48511610071578063e8a3d485146102ee578063e985e9c51461030c578063f242432a1461033c578063f2fde38b14610358578063f5298aca1461037457610115565b8063731133e9146102685780638da5cb5b14610284578063a22cb465146102a2578063bd85b039146102be57610115565b80632eb2c2d6116100e95780632eb2c2d6146101c65780634e1273f4146101e25780634f558e79146102125780636b20c45414610242578063715018a61461025e57610115565b8062fdd58e1461011a57806301ffc9a71461014a5780630e89341c1461017a5780631f7fdffa146101aa575b600080fd5b610134600480360381019061012f9190612435565b610390565b6040516101419190612484565b60405180910390f35b610164600480360381019061015f91906124f7565b610459565b604051610171919061253f565b60405180910390f35b610194600480360381019061018f919061255a565b61053b565b6040516101a19190612620565b60405180910390f35b6101c460048036038101906101bf919061283f565b6105cf565b005b6101e060048036038101906101db91906128fa565b6105e9565b005b6101fc60048036038101906101f79190612a8c565b61068a565b6040516102099190612bc2565b60405180910390f35b61022c6004803603810190610227919061255a565b6107a3565b604051610239919061253f565b60405180910390f35b61025c60048036038101906102579190612be4565b6107b7565b005b610266610854565b005b610282600480360381019061027d9190612c6f565b610868565b005b61028c610882565b6040516102999190612d01565b60405180910390f35b6102bc60048036038101906102b79190612d48565b6108ac565b005b6102d860048036038101906102d3919061255a565b6108c2565b6040516102e59190612484565b60405180910390f35b6102f66108df565b6040516103039190612620565b60405180910390f35b61032660048036038101906103219190612d88565b6108ff565b604051610333919061253f565b60405180910390f35b61035660048036038101906103519190612dc8565b610993565b005b610372600480360381019061036d9190612e5f565b610a34565b005b61038e60048036038101906103899190612e8c565b610ab8565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f890612f51565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061052457507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610534575061053382610b55565b5b9050919050565b60606002805461054a90612fa0565b80601f016020809104026020016040519081016040528092919081815260200182805461057690612fa0565b80156105c35780601f10610598576101008083540402835291602001916105c3565b820191906000526020600020905b8154815290600101906020018083116105a657829003601f168201915b50505050509050919050565b6105d7610bbf565b6105e384848484610c3d565b50505050565b6105f1610e6a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610637575061063685610631610e6a565b6108ff565b5b610676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066d90613044565b60405180910390fd5b6106838585858585610e72565b5050505050565b606081518351146106d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c7906130d6565b60405180910390fd5b6000835167ffffffffffffffff8111156106ed576106ec612647565b5b60405190808252806020026020018201604052801561071b5781602001602082028036833780820191505090505b50905060005b8451811015610798576107688582815181106107405761073f6130f6565b5b602002602001015185838151811061075b5761075a6130f6565b5b6020026020010151610390565b82828151811061077b5761077a6130f6565b5b6020026020010181815250508061079190613154565b9050610721565b508091505092915050565b6000806107af836108c2565b119050919050565b6107bf610e6a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806108055750610804836107ff610e6a565b6108ff565b5b610844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083b90613044565b60405180910390fd5b61084f838383611194565b505050565b61085c610bbf565b6108666000611463565b565b610870610bbf565b61087c84848484611529565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6108be6108b7610e6a565b83836116da565b5050565b600060046000838152602001908152602001600020549050919050565b6060604051806080016040528060458152602001613b2460459139905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61099b610e6a565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806109e157506109e0856109db610e6a565b6108ff565b5b610a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1790613044565b60405180910390fd5b610a2d8585858585611847565b5050505050565b610a3c610bbf565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa39061320f565b60405180910390fd5b610ab581611463565b50565b610ac0610e6a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b065750610b0583610b00610e6a565b6108ff565b5b610b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3c90613044565b60405180910390fd5b610b50838383611ae3565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610bc7610e6a565b73ffffffffffffffffffffffffffffffffffffffff16610be5610882565b73ffffffffffffffffffffffffffffffffffffffff1614610c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c329061327b565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca49061330d565b60405180910390fd5b8151835114610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce89061339f565b60405180910390fd5b6000610cfb610e6a565b9050610d0c81600087878787611d2a565b60005b8451811015610dc557838181518110610d2b57610d2a6130f6565b5b6020026020010151600080878481518110610d4957610d486130f6565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610dab91906133bf565b925050819055508080610dbd90613154565b915050610d0f565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610e3d929190613415565b60405180910390a4610e5481600087878787611d40565b610e6381600087878787611d48565b5050505050565b600033905090565b8151835114610eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ead9061339f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d906134be565b60405180910390fd5b6000610f30610e6a565b9050610f40818787878787611d2a565b60005b84518110156110f1576000858281518110610f6157610f606130f6565b5b602002602001015190506000858381518110610f8057610f7f6130f6565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101890613550565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546110d691906133bf565b92505081905550505050806110ea90613154565b9050610f43565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611168929190613415565b60405180910390a461117e818787878787611d40565b61118c818787878787611d48565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fb906135e2565b60405180910390fd5b8051825114611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f9061339f565b60405180910390fd5b6000611252610e6a565b905061127281856000868660405180602001604052806000815250611d2a565b60005b83518110156113bf576000848281518110611293576112926130f6565b5b6020026020010151905060008483815181106112b2576112b16130f6565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611353576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134a90613674565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806113b790613154565b915050611275565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051611437929190613415565b60405180910390a461145d81856000868660405180602001604052806000815250611d40565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611599576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115909061330d565b60405180910390fd5b60006115a3610e6a565b905060006115b085611f2f565b905060006115bd85611f2f565b90506115ce83600089858589611d2a565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461162d91906133bf565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516116ab929190613694565b60405180910390a46116c283600089858589611d40565b6116d183600089898989611fa9565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611749576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117409061372f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161183a919061253f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ae906134be565b60405180910390fd5b60006118c1610e6a565b905060006118ce85611f2f565b905060006118db85611f2f565b90506118eb838989858589611d2a565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611982576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197990613550565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a3791906133bf565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611ab4929190613694565b60405180910390a4611aca848a8a86868a611d40565b611ad8848a8a8a8a8a611fa9565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4a906135e2565b60405180910390fd5b6000611b5d610e6a565b90506000611b6a84611f2f565b90506000611b7784611f2f565b9050611b9783876000858560405180602001604052806000815250611d2a565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015611c2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2590613674565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611cfb929190613694565b60405180910390a4611d2184886000868660405180602001604052806000815250611d40565b50505050505050565b611d38868686868686612190565b505050505050565b505050505050565b611d678473ffffffffffffffffffffffffffffffffffffffff16612362565b15611f27578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611dad9594939291906137a4565b602060405180830381600087803b158015611dc757600080fd5b505af1925050508015611df857506040513d601f19601f82011682018060405250810190611df59190613821565b60015b611e9e57611e0461385b565b806308c379a01415611e615750611e1961387d565b80611e245750611e63565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e589190612620565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9590613985565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c90613a17565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115611f4e57611f4d612647565b5b604051908082528060200260200182016040528015611f7c5781602001602082028036833780820191505090505b5090508281600081518110611f9457611f936130f6565b5b60200260200101818152505080915050919050565b611fc88473ffffffffffffffffffffffffffffffffffffffff16612362565b15612188578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161200e959493929190613a37565b602060405180830381600087803b15801561202857600080fd5b505af192505050801561205957506040513d601f19601f820116820180604052508101906120569190613821565b60015b6120ff5761206561385b565b806308c379a014156120c2575061207a61387d565b8061208557506120c4565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b99190612620565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f690613985565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217d90613a17565b60405180910390fd5b505b505050505050565b61219e868686868686612385565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156122505760005b835181101561224e578281815181106121f2576121f16130f6565b5b602002602001015160046000868481518110612211576122106130f6565b5b60200260200101518152602001908152602001600020600082825461223691906133bf565b925050819055508061224790613154565b90506121d6565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561235a5760005b83518110156123585760008482815181106122a6576122a56130f6565b5b6020026020010151905060008483815181106122c5576122c46130f6565b5b602002602001015190506000600460008481526020019081526020016000205490508181101561232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232190613b03565b60405180910390fd5b81810360046000858152602001908152602001600020819055505050508061235190613154565b9050612288565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123cc826123a1565b9050919050565b6123dc816123c1565b81146123e757600080fd5b50565b6000813590506123f9816123d3565b92915050565b6000819050919050565b612412816123ff565b811461241d57600080fd5b50565b60008135905061242f81612409565b92915050565b6000806040838503121561244c5761244b612397565b5b600061245a858286016123ea565b925050602061246b85828601612420565b9150509250929050565b61247e816123ff565b82525050565b60006020820190506124996000830184612475565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6124d48161249f565b81146124df57600080fd5b50565b6000813590506124f1816124cb565b92915050565b60006020828403121561250d5761250c612397565b5b600061251b848285016124e2565b91505092915050565b60008115159050919050565b61253981612524565b82525050565b60006020820190506125546000830184612530565b92915050565b6000602082840312156125705761256f612397565b5b600061257e84828501612420565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156125c15780820151818401526020810190506125a6565b838111156125d0576000848401525b50505050565b6000601f19601f8301169050919050565b60006125f282612587565b6125fc8185612592565b935061260c8185602086016125a3565b612615816125d6565b840191505092915050565b6000602082019050818103600083015261263a81846125e7565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61267f826125d6565b810181811067ffffffffffffffff8211171561269e5761269d612647565b5b80604052505050565b60006126b161238d565b90506126bd8282612676565b919050565b600067ffffffffffffffff8211156126dd576126dc612647565b5b602082029050602081019050919050565b600080fd5b6000612706612701846126c2565b6126a7565b90508083825260208201905060208402830185811115612729576127286126ee565b5b835b81811015612752578061273e8882612420565b84526020840193505060208101905061272b565b5050509392505050565b600082601f83011261277157612770612642565b5b81356127818482602086016126f3565b91505092915050565b600080fd5b600067ffffffffffffffff8211156127aa576127a9612647565b5b6127b3826125d6565b9050602081019050919050565b82818337600083830152505050565b60006127e26127dd8461278f565b6126a7565b9050828152602081018484840111156127fe576127fd61278a565b5b6128098482856127c0565b509392505050565b600082601f83011261282657612825612642565b5b81356128368482602086016127cf565b91505092915050565b6000806000806080858703121561285957612858612397565b5b6000612867878288016123ea565b945050602085013567ffffffffffffffff8111156128885761288761239c565b5b6128948782880161275c565b935050604085013567ffffffffffffffff8111156128b5576128b461239c565b5b6128c18782880161275c565b925050606085013567ffffffffffffffff8111156128e2576128e161239c565b5b6128ee87828801612811565b91505092959194509250565b600080600080600060a0868803121561291657612915612397565b5b6000612924888289016123ea565b9550506020612935888289016123ea565b945050604086013567ffffffffffffffff8111156129565761295561239c565b5b6129628882890161275c565b935050606086013567ffffffffffffffff8111156129835761298261239c565b5b61298f8882890161275c565b925050608086013567ffffffffffffffff8111156129b0576129af61239c565b5b6129bc88828901612811565b9150509295509295909350565b600067ffffffffffffffff8211156129e4576129e3612647565b5b602082029050602081019050919050565b6000612a08612a03846129c9565b6126a7565b90508083825260208201905060208402830185811115612a2b57612a2a6126ee565b5b835b81811015612a545780612a4088826123ea565b845260208401935050602081019050612a2d565b5050509392505050565b600082601f830112612a7357612a72612642565b5b8135612a838482602086016129f5565b91505092915050565b60008060408385031215612aa357612aa2612397565b5b600083013567ffffffffffffffff811115612ac157612ac061239c565b5b612acd85828601612a5e565b925050602083013567ffffffffffffffff811115612aee57612aed61239c565b5b612afa8582860161275c565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b39816123ff565b82525050565b6000612b4b8383612b30565b60208301905092915050565b6000602082019050919050565b6000612b6f82612b04565b612b798185612b0f565b9350612b8483612b20565b8060005b83811015612bb5578151612b9c8882612b3f565b9750612ba783612b57565b925050600181019050612b88565b5085935050505092915050565b60006020820190508181036000830152612bdc8184612b64565b905092915050565b600080600060608486031215612bfd57612bfc612397565b5b6000612c0b868287016123ea565b935050602084013567ffffffffffffffff811115612c2c57612c2b61239c565b5b612c388682870161275c565b925050604084013567ffffffffffffffff811115612c5957612c5861239c565b5b612c658682870161275c565b9150509250925092565b60008060008060808587031215612c8957612c88612397565b5b6000612c97878288016123ea565b9450506020612ca887828801612420565b9350506040612cb987828801612420565b925050606085013567ffffffffffffffff811115612cda57612cd961239c565b5b612ce687828801612811565b91505092959194509250565b612cfb816123c1565b82525050565b6000602082019050612d166000830184612cf2565b92915050565b612d2581612524565b8114612d3057600080fd5b50565b600081359050612d4281612d1c565b92915050565b60008060408385031215612d5f57612d5e612397565b5b6000612d6d858286016123ea565b9250506020612d7e85828601612d33565b9150509250929050565b60008060408385031215612d9f57612d9e612397565b5b6000612dad858286016123ea565b9250506020612dbe858286016123ea565b9150509250929050565b600080600080600060a08688031215612de457612de3612397565b5b6000612df2888289016123ea565b9550506020612e03888289016123ea565b9450506040612e1488828901612420565b9350506060612e2588828901612420565b925050608086013567ffffffffffffffff811115612e4657612e4561239c565b5b612e5288828901612811565b9150509295509295909350565b600060208284031215612e7557612e74612397565b5b6000612e83848285016123ea565b91505092915050565b600080600060608486031215612ea557612ea4612397565b5b6000612eb3868287016123ea565b9350506020612ec486828701612420565b9250506040612ed586828701612420565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612f3b602a83612592565b9150612f4682612edf565b604082019050919050565b60006020820190508181036000830152612f6a81612f2e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fb857607f821691505b60208210811415612fcc57612fcb612f71565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b600061302e602e83612592565b915061303982612fd2565b604082019050919050565b6000602082019050818103600083015261305d81613021565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006130c0602983612592565b91506130cb82613064565b604082019050919050565b600060208201905081810360008301526130ef816130b3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061315f826123ff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561319257613191613125565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006131f9602683612592565b91506132048261319d565b604082019050919050565b60006020820190508181036000830152613228816131ec565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613265602083612592565b91506132708261322f565b602082019050919050565b6000602082019050818103600083015261329481613258565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006132f7602183612592565b91506133028261329b565b604082019050919050565b60006020820190508181036000830152613326816132ea565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613389602883612592565b91506133948261332d565b604082019050919050565b600060208201905081810360008301526133b88161337c565b9050919050565b60006133ca826123ff565b91506133d5836123ff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561340a57613409613125565b5b828201905092915050565b6000604082019050818103600083015261342f8185612b64565b905081810360208301526134438184612b64565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006134a8602583612592565b91506134b38261344c565b604082019050919050565b600060208201905081810360008301526134d78161349b565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b600061353a602a83612592565b9150613545826134de565b604082019050919050565b600060208201905081810360008301526135698161352d565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006135cc602383612592565b91506135d782613570565b604082019050919050565b600060208201905081810360008301526135fb816135bf565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b600061365e602483612592565b915061366982613602565b604082019050919050565b6000602082019050818103600083015261368d81613651565b9050919050565b60006040820190506136a96000830185612475565b6136b66020830184612475565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613719602983612592565b9150613724826136bd565b604082019050919050565b600060208201905081810360008301526137488161370c565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006137768261374f565b613780818561375a565b93506137908185602086016125a3565b613799816125d6565b840191505092915050565b600060a0820190506137b96000830188612cf2565b6137c66020830187612cf2565b81810360408301526137d88186612b64565b905081810360608301526137ec8185612b64565b90508181036080830152613800818461376b565b90509695505050505050565b60008151905061381b816124cb565b92915050565b60006020828403121561383757613836612397565b5b60006138458482850161380c565b91505092915050565b60008160e01c9050919050565b600060033d111561387a5760046000803e61387760005161384e565b90505b90565b600060443d101561388d57613910565b61389561238d565b60043d036004823e80513d602482011167ffffffffffffffff821117156138bd575050613910565b808201805167ffffffffffffffff8111156138db5750505050613910565b80602083010160043d0385018111156138f8575050505050613910565b61390782602001850186612676565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600061396f603483612592565b915061397a82613913565b604082019050919050565b6000602082019050818103600083015261399e81613962565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613a01602883612592565b9150613a0c826139a5565b604082019050919050565b60006020820190508181036000830152613a30816139f4565b9050919050565b600060a082019050613a4c6000830188612cf2565b613a596020830187612cf2565b613a666040830186612475565b613a736060830185612475565b8181036080830152613a85818461376b565b90509695505050505050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000613aed602883612592565b9150613af882613a91565b604082019050919050565b60006020820190508181036000830152613b1c81613ae0565b905091905056fe697066733a2f2f516d545246523361754e56316b734155447172374d3148477879436a754676716e745a4b4679727576713655476b2f636f6c6c656374696f6e2e6a736f6ea264697066735822122037807518e0b92b9f692665251b082343ae65cf4b9b469b9f2b462cc43e117fc564736f6c63430008090033

Deployed Bytecode Sourcemap

43300:1105:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21998:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21021:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21742:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43842:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23916:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22394:499;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42092:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38105:324;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40318:103;;;:::i;:::-;;43665:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39677:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22966:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41881:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43501:156;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23193:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23433:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40576:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37805:292;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21998:230;22084:7;22131:1;22112:21;;:7;:21;;;;22104:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22198:9;:13;22208:2;22198:13;;;;;;;;;;;:22;22212:7;22198:22;;;;;;;;;;;;;;;;22191:29;;21998:230;;;;:::o;21021:310::-;21123:4;21175:26;21160:41;;;:11;:41;;;;:110;;;;21233:37;21218:52;;;:11;:52;;;;21160:110;:163;;;;21287:36;21311:11;21287:23;:36::i;:::-;21160:163;21140:183;;21021:310;;;:::o;21742:105::-;21802:13;21835:4;21828:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21742:105;;;:::o;43842:191::-;39563:13;:11;:13::i;:::-;43991:34:::1;44002:2;44006:3;44011:7;44020:4;43991:10;:34::i;:::-;43842:191:::0;;;;:::o;23916:438::-;24157:12;:10;:12::i;:::-;24149:20;;:4;:20;;;:60;;;;24173:36;24190:4;24196:12;:10;:12::i;:::-;24173:16;:36::i;:::-;24149:60;24127:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;24294:52;24317:4;24323:2;24327:3;24332:7;24341:4;24294:22;:52::i;:::-;23916:438;;;;;:::o;22394:499::-;22530:16;22586:3;:10;22567:8;:15;:29;22559:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;22655:30;22702:8;:15;22688:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22655:63;;22736:9;22731:122;22755:8;:15;22751:1;:19;22731:122;;;22811:30;22821:8;22830:1;22821:11;;;;;;;;:::i;:::-;;;;;;;;22834:3;22838:1;22834:6;;;;;;;;:::i;:::-;;;;;;;;22811:9;:30::i;:::-;22792:13;22806:1;22792:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;22772:3;;;;:::i;:::-;;;22731:122;;;;22872:13;22865:20;;;22394:499;;;;:::o;42092:122::-;42149:4;42205:1;42173:29;42199:2;42173:25;:29::i;:::-;:33;42166:40;;42092:122;;;:::o;38105:324::-;38247:12;:10;:12::i;:::-;38236:23;;:7;:23;;;:66;;;;38263:39;38280:7;38289:12;:10;:12::i;:::-;38263:16;:39::i;:::-;38236:66;38214:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;38389:32;38400:7;38409:3;38414:6;38389:10;:32::i;:::-;38105:324;;;:::o;40318:103::-;39563:13;:11;:13::i;:::-;40383:30:::1;40410:1;40383:18;:30::i;:::-;40318:103::o:0;43665:169::-;39563:13;:11;:13::i;:::-;43794:32:::1;43800:7;43809:2;43813:6;43821:4;43794:5;:32::i;:::-;43665:169:::0;;;;:::o;39677:87::-;39723:7;39750:6;;;;;;;;;;;39743:13;;39677:87;:::o;22966:155::-;23061:52;23080:12;:10;:12::i;:::-;23094:8;23104;23061:18;:52::i;:::-;22966:155;;:::o;41881:113::-;41943:7;41970:12;:16;41983:2;41970:16;;;;;;;;;;;;41963:23;;41881:113;;;:::o;43501:156::-;43545:13;43571:78;;;;;;;;;;;;;;;;;;;43501:156;:::o;23193:168::-;23292:4;23316:18;:27;23335:7;23316:27;;;;;;;;;;;;;;;:37;23344:8;23316:37;;;;;;;;;;;;;;;;;;;;;;;;;23309:44;;23193:168;;;;:::o;23433:406::-;23649:12;:10;:12::i;:::-;23641:20;;:4;:20;;;:60;;;;23665:36;23682:4;23688:12;:10;:12::i;:::-;23665:16;:36::i;:::-;23641:60;23619:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;23786:45;23804:4;23810:2;23814;23818:6;23826:4;23786:17;:45::i;:::-;23433:406;;;;;:::o;40576:201::-;39563:13;:11;:13::i;:::-;40685:1:::1;40665:22;;:8;:22;;;;40657:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;40741:28;40760:8;40741:18;:28::i;:::-;40576:201:::0;:::o;37805:292::-;37922:12;:10;:12::i;:::-;37911:23;;:7;:23;;;:66;;;;37938:39;37955:7;37964:12;:10;:12::i;:::-;37938:16;:39::i;:::-;37911:66;37889:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;38064:25;38070:7;38079:2;38083:5;38064;:25::i;:::-;37805:292;;;:::o;19759:157::-;19844:4;19883:25;19868:40;;;:11;:40;;;;19861:47;;19759:157;;;:::o;39842:132::-;39917:12;:10;:12::i;:::-;39906:23;;:7;:5;:7::i;:::-;:23;;;39898:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39842:132::o;29703:813::-;29895:1;29881:16;;:2;:16;;;;29873:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29968:7;:14;29954:3;:10;:28;29946:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30040:16;30059:12;:10;:12::i;:::-;30040:31;;30084:66;30105:8;30123:1;30127:2;30131:3;30136:7;30145:4;30084:20;:66::i;:::-;30168:9;30163:103;30187:3;:10;30183:1;:14;30163:103;;;30244:7;30252:1;30244:10;;;;;;;;:::i;:::-;;;;;;;;30219:9;:17;30229:3;30233:1;30229:6;;;;;;;;:::i;:::-;;;;;;;;30219:17;;;;;;;;;;;:21;30237:2;30219:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;30199:3;;;;;:::i;:::-;;;;30163:103;;;;30319:2;30283:53;;30315:1;30283:53;;30297:8;30283:53;;;30323:3;30328:7;30283:53;;;;;;;:::i;:::-;;;;;;;;30349:65;30369:8;30387:1;30391:2;30395:3;30400:7;30409:4;30349:19;:65::i;:::-;30427:81;30463:8;30481:1;30485:2;30489:3;30494:7;30503:4;30427:35;:81::i;:::-;29862:654;29703:813;;;;:::o;18674:98::-;18727:7;18754:10;18747:17;;18674:98;:::o;26150:1146::-;26377:7;:14;26363:3;:10;:28;26355:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26469:1;26455:16;;:2;:16;;;;26447:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26526:16;26545:12;:10;:12::i;:::-;26526:31;;26570:60;26591:8;26601:4;26607:2;26611:3;26616:7;26625:4;26570:20;:60::i;:::-;26648:9;26643:421;26667:3;:10;26663:1;:14;26643:421;;;26699:10;26712:3;26716:1;26712:6;;;;;;;;:::i;:::-;;;;;;;;26699:19;;26733:14;26750:7;26758:1;26750:10;;;;;;;;:::i;:::-;;;;;;;;26733:27;;26777:19;26799:9;:13;26809:2;26799:13;;;;;;;;;;;:19;26813:4;26799:19;;;;;;;;;;;;;;;;26777:41;;26856:6;26841:11;:21;;26833:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26989:6;26975:11;:20;26953:9;:13;26963:2;26953:13;;;;;;;;;;;:19;26967:4;26953:19;;;;;;;;;;;;;;;:42;;;;27046:6;27025:9;:13;27035:2;27025:13;;;;;;;;;;;:17;27039:2;27025:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26684:380;;;26679:3;;;;:::i;:::-;;;26643:421;;;;27111:2;27081:47;;27105:4;27081:47;;27095:8;27081:47;;;27115:3;27120:7;27081:47;;;;;;;:::i;:::-;;;;;;;;27141:59;27161:8;27171:4;27177:2;27181:3;27186:7;27195:4;27141:19;:59::i;:::-;27213:75;27249:8;27259:4;27265:2;27269:3;27274:7;27283:4;27213:35;:75::i;:::-;26344:952;26150:1146;;;;;:::o;31838:935::-;31972:1;31956:18;;:4;:18;;;;31948:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32047:7;:14;32033:3;:10;:28;32025:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32119:16;32138:12;:10;:12::i;:::-;32119:31;;32163:66;32184:8;32194:4;32208:1;32212:3;32217:7;32163:66;;;;;;;;;;;;:20;:66::i;:::-;32247:9;32242:373;32266:3;:10;32262:1;:14;32242:373;;;32298:10;32311:3;32315:1;32311:6;;;;;;;;:::i;:::-;;;;;;;;32298:19;;32332:14;32349:7;32357:1;32349:10;;;;;;;;:::i;:::-;;;;;;;;32332:27;;32376:19;32398:9;:13;32408:2;32398:13;;;;;;;;;;;:19;32412:4;32398:19;;;;;;;;;;;;;;;;32376:41;;32455:6;32440:11;:21;;32432:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32582:6;32568:11;:20;32546:9;:13;32556:2;32546:13;;;;;;;;;;;:19;32560:4;32546:19;;;;;;;;;;;;;;;:42;;;;32283:332;;;32278:3;;;;;:::i;:::-;;;;32242:373;;;;32670:1;32632:55;;32656:4;32632:55;;32646:8;32632:55;;;32674:3;32679:7;32632:55;;;;;;;:::i;:::-;;;;;;;;32700:65;32720:8;32730:4;32744:1;32748:3;32753:7;32700:65;;;;;;;;;;;;:19;:65::i;:::-;31937:836;31838:935;;;:::o;40937:191::-;41011:16;41030:6;;;;;;;;;;;41011:25;;41056:8;41047:6;;:17;;;;;;;;;;;;;;;;;;41111:8;41080:40;;41101:8;41080:40;;;;;;;;;;;;41000:128;40937:191;:::o;28614:686::-;28738:1;28724:16;;:2;:16;;;;28716:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28791:16;28810:12;:10;:12::i;:::-;28791:31;;28833:20;28856:21;28874:2;28856:17;:21::i;:::-;28833:44;;28888:24;28915:25;28933:6;28915:17;:25::i;:::-;28888:52;;28953:66;28974:8;28992:1;28996:2;29000:3;29005:7;29014:4;28953:20;:66::i;:::-;29053:6;29032:9;:13;29042:2;29032:13;;;;;;;;;;;:17;29046:2;29032:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29112:2;29075:52;;29108:1;29075:52;;29090:8;29075:52;;;29116:2;29120:6;29075:52;;;;;;;:::i;:::-;;;;;;;;29140:65;29160:8;29178:1;29182:2;29186:3;29191:7;29200:4;29140:19;:65::i;:::-;29218:74;29249:8;29267:1;29271:2;29275;29279:6;29287:4;29218:30;:74::i;:::-;28705:595;;;28614:686;;;;:::o;32916:297::-;33037:8;33028:17;;:5;:17;;;;33020:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33140:8;33102:18;:25;33121:5;33102:25;;;;;;;;;;;;;;;:35;33128:8;33102:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33186:8;33164:41;;33179:5;33164:41;;;33196:8;33164:41;;;;;;:::i;:::-;;;;;;;;32916:297;;;:::o;24818:974::-;25020:1;25006:16;;:2;:16;;;;24998:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;25077:16;25096:12;:10;:12::i;:::-;25077:31;;25119:20;25142:21;25160:2;25142:17;:21::i;:::-;25119:44;;25174:24;25201:25;25219:6;25201:17;:25::i;:::-;25174:52;;25239:60;25260:8;25270:4;25276:2;25280:3;25285:7;25294:4;25239:20;:60::i;:::-;25312:19;25334:9;:13;25344:2;25334:13;;;;;;;;;;;:19;25348:4;25334:19;;;;;;;;;;;;;;;;25312:41;;25387:6;25372:11;:21;;25364:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25512:6;25498:11;:20;25476:9;:13;25486:2;25476:13;;;;;;;;;;;:19;25490:4;25476:19;;;;;;;;;;;;;;;:42;;;;25561:6;25540:9;:13;25550:2;25540:13;;;;;;;;;;;:17;25554:2;25540:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;25616:2;25585:46;;25610:4;25585:46;;25600:8;25585:46;;;25620:2;25624:6;25585:46;;;;;;;:::i;:::-;;;;;;;;25644:59;25664:8;25674:4;25680:2;25684:3;25689:7;25698:4;25644:19;:59::i;:::-;25716:68;25747:8;25757:4;25763:2;25767;25771:6;25779:4;25716:30;:68::i;:::-;24987:805;;;;24818:974;;;;;:::o;30814:774::-;30923:1;30907:18;;:4;:18;;;;30899:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30978:16;30997:12;:10;:12::i;:::-;30978:31;;31020:20;31043:21;31061:2;31043:17;:21::i;:::-;31020:44;;31075:24;31102:25;31120:6;31102:17;:25::i;:::-;31075:52;;31140:66;31161:8;31171:4;31185:1;31189:3;31194:7;31140:66;;;;;;;;;;;;:20;:66::i;:::-;31219:19;31241:9;:13;31251:2;31241:13;;;;;;;;;;;:19;31255:4;31241:19;;;;;;;;;;;;;;;;31219:41;;31294:6;31279:11;:21;;31271:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;31413:6;31399:11;:20;31377:9;:13;31387:2;31377:13;;;;;;;;;;;:19;31391:4;31377:19;;;;;;;;;;;;;;;:42;;;;31487:1;31448:54;;31473:4;31448:54;;31463:8;31448:54;;;31491:2;31495:6;31448:54;;;;;;;:::i;:::-;;;;;;;;31515:65;31535:8;31545:4;31559:1;31563:3;31568:7;31515:65;;;;;;;;;;;;:19;:65::i;:::-;30888:700;;;;30814:774;;;:::o;44111:291::-;44328:66;44355:8;44365:4;44371:2;44375:3;44380:7;44389:4;44328:26;:66::i;:::-;44111:291;;;;;;:::o;35347:220::-;;;;;;;:::o;36327:813::-;36567:15;:2;:13;;;:15::i;:::-;36563:570;;;36620:2;36603:43;;;36647:8;36657:4;36663:3;36668:7;36677:4;36603:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36599:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36995:6;36988:14;;;;;;;;;;;:::i;:::-;;;;;;;;36599:523;;;37044:62;;;;;;;;;;:::i;:::-;;;;;;;;36599:523;36776:48;;;36764:60;;;:8;:60;;;;36760:159;;36849:50;;;;;;;;;;:::i;:::-;;;;;;;;36760:159;36683:251;36563:570;36327:813;;;;;;:::o;37148:198::-;37214:16;37243:22;37282:1;37268:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37243:41;;37306:7;37295:5;37301:1;37295:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;37333:5;37326:12;;;37148:198;;;:::o;35575:744::-;35790:15;:2;:13;;;:15::i;:::-;35786:526;;;35843:2;35826:38;;;35865:8;35875:4;35881:2;35885:6;35893:4;35826:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35822:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36174:6;36167:14;;;;;;;;;;;:::i;:::-;;;;;;;;35822:479;;;36223:62;;;;;;;;;;:::i;:::-;;;;;;;;35822:479;35960:43;;;35948:55;;;:8;:55;;;;35944:154;;36028:50;;;;;;;;;;:::i;:::-;;;;;;;;35944:154;35899:214;35786:526;35575:744;;;;;;:::o;42289:931::-;42528:66;42555:8;42565:4;42571:2;42575:3;42580:7;42589:4;42528:26;:66::i;:::-;42627:1;42611:18;;:4;:18;;;42607:160;;;42651:9;42646:110;42670:3;:10;42666:1;:14;42646:110;;;42730:7;42738:1;42730:10;;;;;;;;:::i;:::-;;;;;;;;42706:12;:20;42719:3;42723:1;42719:6;;;;;;;;:::i;:::-;;;;;;;;42706:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;42682:3;;;;:::i;:::-;;;42646:110;;;;42607:160;42797:1;42783:16;;:2;:16;;;42779:434;;;42821:9;42816:386;42840:3;:10;42836:1;:14;42816:386;;;42876:10;42889:3;42893:1;42889:6;;;;;;;;:::i;:::-;;;;;;;;42876:19;;42914:14;42931:7;42939:1;42931:10;;;;;;;;:::i;:::-;;;;;;;;42914:27;;42960:14;42977:12;:16;42990:2;42977:16;;;;;;;;;;;;42960:33;;43030:6;43020;:16;;43012:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;43161:6;43152;:15;43133:12;:16;43146:2;43133:16;;;;;;;;;;;:34;;;;42857:345;;;42852:3;;;;:::i;:::-;;;42816:386;;;;42779:434;42289:931;;;;;;:::o;9830:326::-;9890:4;10147:1;10125:7;:19;;;:23;10118:30;;9830:326;;;:::o;34171:221::-;;;;;;;:::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:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:329::-;3272:6;3321:2;3309:9;3300:7;3296:23;3292:32;3289:119;;;3327:79;;:::i;:::-;3289:119;3447:1;3472:53;3517:7;3508:6;3497:9;3493:22;3472:53;:::i;:::-;3462:63;;3418:117;3213:329;;;;:::o;3548:99::-;3600:6;3634:5;3628:12;3618:22;;3548:99;;;:::o;3653:169::-;3737:11;3771:6;3766:3;3759:19;3811:4;3806:3;3802:14;3787:29;;3653:169;;;;:::o;3828:307::-;3896:1;3906:113;3920:6;3917:1;3914:13;3906:113;;;4005:1;4000:3;3996:11;3990:18;3986:1;3981:3;3977:11;3970:39;3942:2;3939:1;3935:10;3930:15;;3906:113;;;4037:6;4034:1;4031:13;4028:101;;;4117:1;4108:6;4103:3;4099:16;4092:27;4028:101;3877:258;3828:307;;;:::o;4141:102::-;4182:6;4233:2;4229:7;4224:2;4217:5;4213:14;4209:28;4199:38;;4141:102;;;:::o;4249:364::-;4337:3;4365:39;4398:5;4365:39;:::i;:::-;4420:71;4484:6;4479:3;4420:71;:::i;:::-;4413:78;;4500:52;4545:6;4540:3;4533:4;4526:5;4522:16;4500:52;:::i;:::-;4577:29;4599:6;4577:29;:::i;:::-;4572:3;4568:39;4561:46;;4341:272;4249:364;;;;:::o;4619:313::-;4732:4;4770:2;4759:9;4755:18;4747:26;;4819:9;4813:4;4809:20;4805:1;4794:9;4790:17;4783:47;4847:78;4920:4;4911:6;4847:78;:::i;:::-;4839:86;;4619:313;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:180;5109:77;5106:1;5099:88;5206:4;5203:1;5196:15;5230:4;5227:1;5220:15;5247:281;5330:27;5352:4;5330:27;:::i;:::-;5322:6;5318:40;5460:6;5448:10;5445:22;5424:18;5412:10;5409:34;5406:62;5403:88;;;5471:18;;:::i;:::-;5403:88;5511:10;5507:2;5500:22;5290:238;5247:281;;:::o;5534:129::-;5568:6;5595:20;;:::i;:::-;5585:30;;5624:33;5652:4;5644:6;5624:33;:::i;:::-;5534:129;;;:::o;5669:311::-;5746:4;5836:18;5828:6;5825:30;5822:56;;;5858:18;;:::i;:::-;5822:56;5908:4;5900:6;5896:17;5888:25;;5968:4;5962;5958:15;5950:23;;5669:311;;;:::o;5986:117::-;6095:1;6092;6085:12;6126:710;6222:5;6247:81;6263:64;6320:6;6263:64;:::i;:::-;6247:81;:::i;:::-;6238:90;;6348:5;6377:6;6370:5;6363:21;6411:4;6404:5;6400:16;6393:23;;6464:4;6456:6;6452:17;6444:6;6440:30;6493:3;6485:6;6482:15;6479:122;;;6512:79;;:::i;:::-;6479:122;6627:6;6610:220;6644:6;6639:3;6636:15;6610:220;;;6719:3;6748:37;6781:3;6769:10;6748:37;:::i;:::-;6743:3;6736:50;6815:4;6810:3;6806:14;6799:21;;6686:144;6670:4;6665:3;6661:14;6654:21;;6610:220;;;6614:21;6228:608;;6126:710;;;;;:::o;6859:370::-;6930:5;6979:3;6972:4;6964:6;6960:17;6956:27;6946:122;;6987:79;;:::i;:::-;6946:122;7104:6;7091:20;7129:94;7219:3;7211:6;7204:4;7196:6;7192:17;7129:94;:::i;:::-;7120:103;;6936:293;6859:370;;;;:::o;7235:117::-;7344:1;7341;7334:12;7358:307;7419:4;7509:18;7501:6;7498:30;7495:56;;;7531:18;;:::i;:::-;7495:56;7569:29;7591:6;7569:29;:::i;:::-;7561:37;;7653:4;7647;7643:15;7635:23;;7358:307;;;:::o;7671:154::-;7755:6;7750:3;7745;7732:30;7817:1;7808:6;7803:3;7799:16;7792:27;7671:154;;;:::o;7831:410::-;7908:5;7933:65;7949:48;7990:6;7949:48;:::i;:::-;7933:65;:::i;:::-;7924:74;;8021:6;8014:5;8007:21;8059:4;8052:5;8048:16;8097:3;8088:6;8083:3;8079:16;8076:25;8073:112;;;8104:79;;:::i;:::-;8073:112;8194:41;8228:6;8223:3;8218;8194:41;:::i;:::-;7914:327;7831:410;;;;;:::o;8260:338::-;8315:5;8364:3;8357:4;8349:6;8345:17;8341:27;8331:122;;8372:79;;:::i;:::-;8331:122;8489:6;8476:20;8514:78;8588:3;8580:6;8573:4;8565:6;8561:17;8514:78;:::i;:::-;8505:87;;8321:277;8260:338;;;;:::o;8604:1363::-;8749:6;8757;8765;8773;8822:3;8810:9;8801:7;8797:23;8793:33;8790:120;;;8829:79;;:::i;:::-;8790:120;8949:1;8974:53;9019:7;9010:6;8999:9;8995:22;8974:53;:::i;:::-;8964:63;;8920:117;9104:2;9093:9;9089:18;9076:32;9135:18;9127:6;9124:30;9121:117;;;9157:79;;:::i;:::-;9121:117;9262:78;9332:7;9323:6;9312:9;9308:22;9262:78;:::i;:::-;9252:88;;9047:303;9417:2;9406:9;9402:18;9389:32;9448:18;9440:6;9437:30;9434:117;;;9470:79;;:::i;:::-;9434:117;9575:78;9645:7;9636:6;9625:9;9621:22;9575:78;:::i;:::-;9565:88;;9360:303;9730:2;9719:9;9715:18;9702:32;9761:18;9753:6;9750:30;9747:117;;;9783:79;;:::i;:::-;9747:117;9888:62;9942:7;9933:6;9922:9;9918:22;9888:62;:::i;:::-;9878:72;;9673:287;8604:1363;;;;;;;:::o;9973:1509::-;10127:6;10135;10143;10151;10159;10208:3;10196:9;10187:7;10183:23;10179:33;10176:120;;;10215:79;;:::i;:::-;10176:120;10335:1;10360:53;10405:7;10396:6;10385:9;10381:22;10360:53;:::i;:::-;10350:63;;10306:117;10462:2;10488:53;10533:7;10524:6;10513:9;10509:22;10488:53;:::i;:::-;10478:63;;10433:118;10618:2;10607:9;10603:18;10590:32;10649:18;10641:6;10638:30;10635:117;;;10671:79;;:::i;:::-;10635:117;10776:78;10846:7;10837:6;10826:9;10822:22;10776:78;:::i;:::-;10766:88;;10561:303;10931:2;10920:9;10916:18;10903:32;10962:18;10954:6;10951:30;10948:117;;;10984:79;;:::i;:::-;10948:117;11089:78;11159:7;11150:6;11139:9;11135:22;11089:78;:::i;:::-;11079:88;;10874:303;11244:3;11233:9;11229:19;11216:33;11276:18;11268:6;11265:30;11262:117;;;11298:79;;:::i;:::-;11262:117;11403:62;11457:7;11448:6;11437:9;11433:22;11403:62;:::i;:::-;11393:72;;11187:288;9973:1509;;;;;;;;:::o;11488:311::-;11565:4;11655:18;11647:6;11644:30;11641:56;;;11677:18;;:::i;:::-;11641:56;11727:4;11719:6;11715:17;11707:25;;11787:4;11781;11777:15;11769:23;;11488:311;;;:::o;11822:710::-;11918:5;11943:81;11959:64;12016:6;11959:64;:::i;:::-;11943:81;:::i;:::-;11934:90;;12044:5;12073:6;12066:5;12059:21;12107:4;12100:5;12096:16;12089:23;;12160:4;12152:6;12148:17;12140:6;12136:30;12189:3;12181:6;12178:15;12175:122;;;12208:79;;:::i;:::-;12175:122;12323:6;12306:220;12340:6;12335:3;12332:15;12306:220;;;12415:3;12444:37;12477:3;12465:10;12444:37;:::i;:::-;12439:3;12432:50;12511:4;12506:3;12502:14;12495:21;;12382:144;12366:4;12361:3;12357:14;12350:21;;12306:220;;;12310:21;11924:608;;11822:710;;;;;:::o;12555:370::-;12626:5;12675:3;12668:4;12660:6;12656:17;12652:27;12642:122;;12683:79;;:::i;:::-;12642:122;12800:6;12787:20;12825:94;12915:3;12907:6;12900:4;12892:6;12888:17;12825:94;:::i;:::-;12816:103;;12632:293;12555:370;;;;:::o;12931:894::-;13049:6;13057;13106:2;13094:9;13085:7;13081:23;13077:32;13074:119;;;13112:79;;:::i;:::-;13074:119;13260:1;13249:9;13245:17;13232:31;13290:18;13282:6;13279:30;13276:117;;;13312:79;;:::i;:::-;13276:117;13417:78;13487:7;13478:6;13467:9;13463:22;13417:78;:::i;:::-;13407:88;;13203:302;13572:2;13561:9;13557:18;13544:32;13603:18;13595:6;13592:30;13589:117;;;13625:79;;:::i;:::-;13589:117;13730:78;13800:7;13791:6;13780:9;13776:22;13730:78;:::i;:::-;13720:88;;13515:303;12931:894;;;;;:::o;13831:114::-;13898:6;13932:5;13926:12;13916:22;;13831:114;;;:::o;13951:184::-;14050:11;14084:6;14079:3;14072:19;14124:4;14119:3;14115:14;14100:29;;13951:184;;;;:::o;14141:132::-;14208:4;14231:3;14223:11;;14261:4;14256:3;14252:14;14244:22;;14141:132;;;:::o;14279:108::-;14356:24;14374:5;14356:24;:::i;:::-;14351:3;14344:37;14279:108;;:::o;14393:179::-;14462:10;14483:46;14525:3;14517:6;14483:46;:::i;:::-;14561:4;14556:3;14552:14;14538:28;;14393:179;;;;:::o;14578:113::-;14648:4;14680;14675:3;14671:14;14663:22;;14578:113;;;:::o;14727:732::-;14846:3;14875:54;14923:5;14875:54;:::i;:::-;14945:86;15024:6;15019:3;14945:86;:::i;:::-;14938:93;;15055:56;15105:5;15055:56;:::i;:::-;15134:7;15165:1;15150:284;15175:6;15172:1;15169:13;15150:284;;;15251:6;15245:13;15278:63;15337:3;15322:13;15278:63;:::i;:::-;15271:70;;15364:60;15417:6;15364:60;:::i;:::-;15354:70;;15210:224;15197:1;15194;15190:9;15185:14;;15150:284;;;15154:14;15450:3;15443:10;;14851:608;;;14727:732;;;;:::o;15465:373::-;15608:4;15646:2;15635:9;15631:18;15623:26;;15695:9;15689:4;15685:20;15681:1;15670:9;15666:17;15659:47;15723:108;15826:4;15817:6;15723:108;:::i;:::-;15715:116;;15465:373;;;;:::o;15844:1039::-;15971:6;15979;15987;16036:2;16024:9;16015:7;16011:23;16007:32;16004:119;;;16042:79;;:::i;:::-;16004:119;16162:1;16187:53;16232:7;16223:6;16212:9;16208:22;16187:53;:::i;:::-;16177:63;;16133:117;16317:2;16306:9;16302:18;16289:32;16348:18;16340:6;16337:30;16334:117;;;16370:79;;:::i;:::-;16334:117;16475:78;16545:7;16536:6;16525:9;16521:22;16475:78;:::i;:::-;16465:88;;16260:303;16630:2;16619:9;16615:18;16602:32;16661:18;16653:6;16650:30;16647:117;;;16683:79;;:::i;:::-;16647:117;16788:78;16858:7;16849:6;16838:9;16834:22;16788:78;:::i;:::-;16778:88;;16573:303;15844:1039;;;;;:::o;16889:943::-;16984:6;16992;17000;17008;17057:3;17045:9;17036:7;17032:23;17028:33;17025:120;;;17064:79;;:::i;:::-;17025:120;17184:1;17209:53;17254:7;17245:6;17234:9;17230:22;17209:53;:::i;:::-;17199:63;;17155:117;17311:2;17337:53;17382:7;17373:6;17362:9;17358:22;17337:53;:::i;:::-;17327:63;;17282:118;17439:2;17465:53;17510:7;17501:6;17490:9;17486:22;17465:53;:::i;:::-;17455:63;;17410:118;17595:2;17584:9;17580:18;17567:32;17626:18;17618:6;17615:30;17612:117;;;17648:79;;:::i;:::-;17612:117;17753:62;17807:7;17798:6;17787:9;17783:22;17753:62;:::i;:::-;17743:72;;17538:287;16889:943;;;;;;;:::o;17838:118::-;17925:24;17943:5;17925:24;:::i;:::-;17920:3;17913:37;17838:118;;:::o;17962:222::-;18055:4;18093:2;18082:9;18078:18;18070:26;;18106:71;18174:1;18163:9;18159:17;18150:6;18106:71;:::i;:::-;17962:222;;;;:::o;18190:116::-;18260:21;18275:5;18260:21;:::i;:::-;18253:5;18250:32;18240:60;;18296:1;18293;18286:12;18240:60;18190:116;:::o;18312:133::-;18355:5;18393:6;18380:20;18371:29;;18409:30;18433:5;18409:30;:::i;:::-;18312:133;;;;:::o;18451:468::-;18516:6;18524;18573:2;18561:9;18552:7;18548:23;18544:32;18541:119;;;18579:79;;:::i;:::-;18541:119;18699:1;18724:53;18769:7;18760:6;18749:9;18745:22;18724:53;:::i;:::-;18714:63;;18670:117;18826:2;18852:50;18894:7;18885:6;18874:9;18870:22;18852:50;:::i;:::-;18842:60;;18797:115;18451:468;;;;;:::o;18925:474::-;18993:6;19001;19050:2;19038:9;19029:7;19025:23;19021:32;19018:119;;;19056:79;;:::i;:::-;19018:119;19176:1;19201:53;19246:7;19237:6;19226:9;19222:22;19201:53;:::i;:::-;19191:63;;19147:117;19303:2;19329:53;19374:7;19365:6;19354:9;19350:22;19329:53;:::i;:::-;19319:63;;19274:118;18925:474;;;;;:::o;19405:1089::-;19509:6;19517;19525;19533;19541;19590:3;19578:9;19569:7;19565:23;19561:33;19558:120;;;19597:79;;:::i;:::-;19558:120;19717:1;19742:53;19787:7;19778:6;19767:9;19763:22;19742:53;:::i;:::-;19732:63;;19688:117;19844:2;19870:53;19915:7;19906:6;19895:9;19891:22;19870:53;:::i;:::-;19860:63;;19815:118;19972:2;19998:53;20043:7;20034:6;20023:9;20019:22;19998:53;:::i;:::-;19988:63;;19943:118;20100:2;20126:53;20171:7;20162:6;20151:9;20147:22;20126:53;:::i;:::-;20116:63;;20071:118;20256:3;20245:9;20241:19;20228:33;20288:18;20280:6;20277:30;20274:117;;;20310:79;;:::i;:::-;20274:117;20415:62;20469:7;20460:6;20449:9;20445:22;20415:62;:::i;:::-;20405:72;;20199:288;19405:1089;;;;;;;;:::o;20500:329::-;20559:6;20608:2;20596:9;20587:7;20583:23;20579:32;20576:119;;;20614:79;;:::i;:::-;20576:119;20734:1;20759:53;20804:7;20795:6;20784:9;20780:22;20759:53;:::i;:::-;20749:63;;20705:117;20500:329;;;;:::o;20835:619::-;20912:6;20920;20928;20977:2;20965:9;20956:7;20952:23;20948:32;20945:119;;;20983:79;;:::i;:::-;20945:119;21103:1;21128:53;21173:7;21164:6;21153:9;21149:22;21128:53;:::i;:::-;21118:63;;21074:117;21230:2;21256:53;21301:7;21292:6;21281:9;21277:22;21256:53;:::i;:::-;21246:63;;21201:118;21358:2;21384:53;21429:7;21420:6;21409:9;21405:22;21384:53;:::i;:::-;21374:63;;21329:118;20835:619;;;;;:::o;21460:229::-;21600:34;21596:1;21588:6;21584:14;21577:58;21669:12;21664:2;21656:6;21652:15;21645:37;21460:229;:::o;21695:366::-;21837:3;21858:67;21922:2;21917:3;21858:67;:::i;:::-;21851:74;;21934:93;22023:3;21934:93;:::i;:::-;22052:2;22047:3;22043:12;22036:19;;21695:366;;;:::o;22067:419::-;22233:4;22271:2;22260:9;22256:18;22248:26;;22320:9;22314:4;22310:20;22306:1;22295:9;22291:17;22284:47;22348:131;22474:4;22348:131;:::i;:::-;22340:139;;22067:419;;;:::o;22492:180::-;22540:77;22537:1;22530:88;22637:4;22634:1;22627:15;22661:4;22658:1;22651:15;22678:320;22722:6;22759:1;22753:4;22749:12;22739:22;;22806:1;22800:4;22796:12;22827:18;22817:81;;22883:4;22875:6;22871:17;22861:27;;22817:81;22945:2;22937:6;22934:14;22914:18;22911:38;22908:84;;;22964:18;;:::i;:::-;22908:84;22729:269;22678:320;;;:::o;23004:233::-;23144:34;23140:1;23132:6;23128:14;23121:58;23213:16;23208:2;23200:6;23196:15;23189:41;23004:233;:::o;23243:366::-;23385:3;23406:67;23470:2;23465:3;23406:67;:::i;:::-;23399:74;;23482:93;23571:3;23482:93;:::i;:::-;23600:2;23595:3;23591:12;23584:19;;23243:366;;;:::o;23615:419::-;23781:4;23819:2;23808:9;23804:18;23796:26;;23868:9;23862:4;23858:20;23854:1;23843:9;23839:17;23832:47;23896:131;24022:4;23896:131;:::i;:::-;23888:139;;23615:419;;;:::o;24040:228::-;24180:34;24176:1;24168:6;24164:14;24157:58;24249:11;24244:2;24236:6;24232:15;24225:36;24040:228;:::o;24274:366::-;24416:3;24437:67;24501:2;24496:3;24437:67;:::i;:::-;24430:74;;24513:93;24602:3;24513:93;:::i;:::-;24631:2;24626:3;24622:12;24615:19;;24274:366;;;:::o;24646:419::-;24812:4;24850:2;24839:9;24835:18;24827:26;;24899:9;24893:4;24889:20;24885:1;24874:9;24870:17;24863:47;24927:131;25053:4;24927:131;:::i;:::-;24919:139;;24646:419;;;:::o;25071:180::-;25119:77;25116:1;25109:88;25216:4;25213:1;25206:15;25240:4;25237:1;25230:15;25257:180;25305:77;25302:1;25295:88;25402:4;25399:1;25392:15;25426:4;25423:1;25416:15;25443:233;25482:3;25505:24;25523:5;25505:24;:::i;:::-;25496:33;;25551:66;25544:5;25541:77;25538:103;;;25621:18;;:::i;:::-;25538:103;25668:1;25661:5;25657:13;25650:20;;25443:233;;;:::o;25682:225::-;25822:34;25818:1;25810:6;25806:14;25799:58;25891:8;25886:2;25878:6;25874:15;25867:33;25682:225;:::o;25913:366::-;26055:3;26076:67;26140:2;26135:3;26076:67;:::i;:::-;26069:74;;26152:93;26241:3;26152:93;:::i;:::-;26270:2;26265:3;26261:12;26254:19;;25913:366;;;:::o;26285:419::-;26451:4;26489:2;26478:9;26474:18;26466:26;;26538:9;26532:4;26528:20;26524:1;26513:9;26509:17;26502:47;26566:131;26692:4;26566:131;:::i;:::-;26558:139;;26285:419;;;:::o;26710:182::-;26850:34;26846:1;26838:6;26834:14;26827:58;26710:182;:::o;26898:366::-;27040:3;27061:67;27125:2;27120:3;27061:67;:::i;:::-;27054:74;;27137:93;27226:3;27137:93;:::i;:::-;27255:2;27250:3;27246:12;27239:19;;26898:366;;;:::o;27270:419::-;27436:4;27474:2;27463:9;27459:18;27451:26;;27523:9;27517:4;27513:20;27509:1;27498:9;27494:17;27487:47;27551:131;27677:4;27551:131;:::i;:::-;27543:139;;27270:419;;;:::o;27695:220::-;27835:34;27831:1;27823:6;27819:14;27812:58;27904:3;27899:2;27891:6;27887:15;27880:28;27695:220;:::o;27921:366::-;28063:3;28084:67;28148:2;28143:3;28084:67;:::i;:::-;28077:74;;28160:93;28249:3;28160:93;:::i;:::-;28278:2;28273:3;28269:12;28262:19;;27921:366;;;:::o;28293:419::-;28459:4;28497:2;28486:9;28482:18;28474:26;;28546:9;28540:4;28536:20;28532:1;28521:9;28517:17;28510:47;28574:131;28700:4;28574:131;:::i;:::-;28566:139;;28293:419;;;:::o;28718:227::-;28858:34;28854:1;28846:6;28842:14;28835:58;28927:10;28922:2;28914:6;28910:15;28903:35;28718:227;:::o;28951:366::-;29093:3;29114:67;29178:2;29173:3;29114:67;:::i;:::-;29107:74;;29190:93;29279:3;29190:93;:::i;:::-;29308:2;29303:3;29299:12;29292:19;;28951:366;;;:::o;29323:419::-;29489:4;29527:2;29516:9;29512:18;29504:26;;29576:9;29570:4;29566:20;29562:1;29551:9;29547:17;29540:47;29604:131;29730:4;29604:131;:::i;:::-;29596:139;;29323:419;;;:::o;29748:305::-;29788:3;29807:20;29825:1;29807:20;:::i;:::-;29802:25;;29841:20;29859:1;29841:20;:::i;:::-;29836:25;;29995:1;29927:66;29923:74;29920:1;29917:81;29914:107;;;30001:18;;:::i;:::-;29914:107;30045:1;30042;30038:9;30031:16;;29748:305;;;;:::o;30059:634::-;30280:4;30318:2;30307:9;30303:18;30295:26;;30367:9;30361:4;30357:20;30353:1;30342:9;30338:17;30331:47;30395:108;30498:4;30489:6;30395:108;:::i;:::-;30387:116;;30550:9;30544:4;30540:20;30535:2;30524:9;30520:18;30513:48;30578:108;30681:4;30672:6;30578:108;:::i;:::-;30570:116;;30059:634;;;;;:::o;30699:224::-;30839:34;30835:1;30827:6;30823:14;30816:58;30908:7;30903:2;30895:6;30891:15;30884:32;30699:224;:::o;30929:366::-;31071:3;31092:67;31156:2;31151:3;31092:67;:::i;:::-;31085:74;;31168:93;31257:3;31168:93;:::i;:::-;31286:2;31281:3;31277:12;31270:19;;30929:366;;;:::o;31301:419::-;31467:4;31505:2;31494:9;31490:18;31482:26;;31554:9;31548:4;31544:20;31540:1;31529:9;31525:17;31518:47;31582:131;31708:4;31582:131;:::i;:::-;31574:139;;31301:419;;;:::o;31726:229::-;31866:34;31862:1;31854:6;31850:14;31843:58;31935:12;31930:2;31922:6;31918:15;31911:37;31726:229;:::o;31961:366::-;32103:3;32124:67;32188:2;32183:3;32124:67;:::i;:::-;32117:74;;32200:93;32289:3;32200:93;:::i;:::-;32318:2;32313:3;32309:12;32302:19;;31961:366;;;:::o;32333:419::-;32499:4;32537:2;32526:9;32522:18;32514:26;;32586:9;32580:4;32576:20;32572:1;32561:9;32557:17;32550:47;32614:131;32740:4;32614:131;:::i;:::-;32606:139;;32333:419;;;:::o;32758:222::-;32898:34;32894:1;32886:6;32882:14;32875:58;32967:5;32962:2;32954:6;32950:15;32943:30;32758:222;:::o;32986:366::-;33128:3;33149:67;33213:2;33208:3;33149:67;:::i;:::-;33142:74;;33225:93;33314:3;33225:93;:::i;:::-;33343:2;33338:3;33334:12;33327:19;;32986:366;;;:::o;33358:419::-;33524:4;33562:2;33551:9;33547:18;33539:26;;33611:9;33605:4;33601:20;33597:1;33586:9;33582:17;33575:47;33639:131;33765:4;33639:131;:::i;:::-;33631:139;;33358:419;;;:::o;33783:223::-;33923:34;33919:1;33911:6;33907:14;33900:58;33992:6;33987:2;33979:6;33975:15;33968:31;33783:223;:::o;34012:366::-;34154:3;34175:67;34239:2;34234:3;34175:67;:::i;:::-;34168:74;;34251:93;34340:3;34251:93;:::i;:::-;34369:2;34364:3;34360:12;34353:19;;34012:366;;;:::o;34384:419::-;34550:4;34588:2;34577:9;34573:18;34565:26;;34637:9;34631:4;34627:20;34623:1;34612:9;34608:17;34601:47;34665:131;34791:4;34665:131;:::i;:::-;34657:139;;34384:419;;;:::o;34809:332::-;34930:4;34968:2;34957:9;34953:18;34945:26;;34981:71;35049:1;35038:9;35034:17;35025:6;34981:71;:::i;:::-;35062:72;35130:2;35119:9;35115:18;35106:6;35062:72;:::i;:::-;34809:332;;;;;:::o;35147:228::-;35287:34;35283:1;35275:6;35271:14;35264:58;35356:11;35351:2;35343:6;35339:15;35332:36;35147:228;:::o;35381:366::-;35523:3;35544:67;35608:2;35603:3;35544:67;:::i;:::-;35537:74;;35620:93;35709:3;35620:93;:::i;:::-;35738:2;35733:3;35729:12;35722:19;;35381:366;;;:::o;35753:419::-;35919:4;35957:2;35946:9;35942:18;35934:26;;36006:9;36000:4;35996:20;35992:1;35981:9;35977:17;35970:47;36034:131;36160:4;36034:131;:::i;:::-;36026:139;;35753:419;;;:::o;36178:98::-;36229:6;36263:5;36257:12;36247:22;;36178:98;;;:::o;36282:168::-;36365:11;36399:6;36394:3;36387:19;36439:4;36434:3;36430:14;36415:29;;36282:168;;;;:::o;36456:360::-;36542:3;36570:38;36602:5;36570:38;:::i;:::-;36624:70;36687:6;36682:3;36624:70;:::i;:::-;36617:77;;36703:52;36748:6;36743:3;36736:4;36729:5;36725:16;36703:52;:::i;:::-;36780:29;36802:6;36780:29;:::i;:::-;36775:3;36771:39;36764:46;;36546:270;36456:360;;;;:::o;36822:1053::-;37145:4;37183:3;37172:9;37168:19;37160:27;;37197:71;37265:1;37254:9;37250:17;37241:6;37197:71;:::i;:::-;37278:72;37346:2;37335:9;37331:18;37322:6;37278:72;:::i;:::-;37397:9;37391:4;37387:20;37382:2;37371:9;37367:18;37360:48;37425:108;37528:4;37519:6;37425:108;:::i;:::-;37417:116;;37580:9;37574:4;37570:20;37565:2;37554:9;37550:18;37543:48;37608:108;37711:4;37702:6;37608:108;:::i;:::-;37600:116;;37764:9;37758:4;37754:20;37748:3;37737:9;37733:19;37726:49;37792:76;37863:4;37854:6;37792:76;:::i;:::-;37784:84;;36822:1053;;;;;;;;:::o;37881:141::-;37937:5;37968:6;37962:13;37953:22;;37984:32;38010:5;37984:32;:::i;:::-;37881:141;;;;:::o;38028:349::-;38097:6;38146:2;38134:9;38125:7;38121:23;38117:32;38114:119;;;38152:79;;:::i;:::-;38114:119;38272:1;38297:63;38352:7;38343:6;38332:9;38328:22;38297:63;:::i;:::-;38287:73;;38243:127;38028:349;;;;:::o;38383:106::-;38427:8;38476:5;38471:3;38467:15;38446:36;;38383:106;;;:::o;38495:183::-;38530:3;38568:1;38550:16;38547:23;38544:128;;;38606:1;38603;38600;38585:23;38628:34;38659:1;38653:8;38628:34;:::i;:::-;38621:41;;38544:128;38495:183;:::o;38684:711::-;38723:3;38761:4;38743:16;38740:26;38737:39;;;38769:5;;38737:39;38798:20;;:::i;:::-;38873:1;38855:16;38851:24;38848:1;38842:4;38827:49;38906:4;38900:11;39005:16;38998:4;38990:6;38986:17;38983:39;38950:18;38942:6;38939:30;38923:113;38920:146;;;39051:5;;;;38920:146;39097:6;39091:4;39087:17;39133:3;39127:10;39160:18;39152:6;39149:30;39146:43;;;39182:5;;;;;;39146:43;39230:6;39223:4;39218:3;39214:14;39210:27;39289:1;39271:16;39267:24;39261:4;39257:35;39252:3;39249:44;39246:57;;;39296:5;;;;;;;39246:57;39313;39361:6;39355:4;39351:17;39343:6;39339:30;39333:4;39313:57;:::i;:::-;39386:3;39379:10;;38727:668;;;;;38684:711;;:::o;39401:239::-;39541:34;39537:1;39529:6;39525:14;39518:58;39610:22;39605:2;39597:6;39593:15;39586:47;39401:239;:::o;39646:366::-;39788:3;39809:67;39873:2;39868:3;39809:67;:::i;:::-;39802:74;;39885:93;39974:3;39885:93;:::i;:::-;40003:2;39998:3;39994:12;39987:19;;39646:366;;;:::o;40018:419::-;40184:4;40222:2;40211:9;40207:18;40199:26;;40271:9;40265:4;40261:20;40257:1;40246:9;40242:17;40235:47;40299:131;40425:4;40299:131;:::i;:::-;40291:139;;40018:419;;;:::o;40443:227::-;40583:34;40579:1;40571:6;40567:14;40560:58;40652:10;40647:2;40639:6;40635:15;40628:35;40443:227;:::o;40676:366::-;40818:3;40839:67;40903:2;40898:3;40839:67;:::i;:::-;40832:74;;40915:93;41004:3;40915:93;:::i;:::-;41033:2;41028:3;41024:12;41017:19;;40676:366;;;:::o;41048:419::-;41214:4;41252:2;41241:9;41237:18;41229:26;;41301:9;41295:4;41291:20;41287:1;41276:9;41272:17;41265:47;41329:131;41455:4;41329:131;:::i;:::-;41321:139;;41048:419;;;:::o;41473:751::-;41696:4;41734:3;41723:9;41719:19;41711:27;;41748:71;41816:1;41805:9;41801:17;41792:6;41748:71;:::i;:::-;41829:72;41897:2;41886:9;41882:18;41873:6;41829:72;:::i;:::-;41911;41979:2;41968:9;41964:18;41955:6;41911:72;:::i;:::-;41993;42061:2;42050:9;42046:18;42037:6;41993:72;:::i;:::-;42113:9;42107:4;42103:20;42097:3;42086:9;42082:19;42075:49;42141:76;42212:4;42203:6;42141:76;:::i;:::-;42133:84;;41473:751;;;;;;;;:::o;42230:227::-;42370:34;42366:1;42358:6;42354:14;42347:58;42439:10;42434:2;42426:6;42422:15;42415:35;42230:227;:::o;42463:366::-;42605:3;42626:67;42690:2;42685:3;42626:67;:::i;:::-;42619:74;;42702:93;42791:3;42702:93;:::i;:::-;42820:2;42815:3;42811:12;42804:19;;42463:366;;;:::o;42835:419::-;43001:4;43039:2;43028:9;43024:18;43016:26;;43088:9;43082:4;43078:20;43074:1;43063:9;43059:17;43052:47;43116:131;43242:4;43116:131;:::i;:::-;43108:139;;42835:419;;;:::o

Swarm Source

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