ETH Price: $3,011.94 (+1.38%)
Gas: 7 Gwei

Token

Member Pass (MP)
 

Overview

Max Total Supply

432 MP

Holders

270

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
dommybunks.eth
0x94d0ad4412a7af04c05ce5563b5cd68db448454c
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:
MemberPass

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/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/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Address.sol


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

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/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/contracts/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/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


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

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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

        return array;
    }
}

// File: contracts/MemberPass.sol



pragma solidity ^0.8.0;





contract MemberPass is ERC1155, Ownable {

    string public constant name = "Member Pass";

    string public constant symbol = "MP";



    uint32 public startDate = 1645568520;

    uint32 public totalSupply = 0;

    uint32 public constant maxSupply = 5555;

    uint256 public constant unitPrice = 0.042 ether;



    constructor(string memory uri) ERC1155(uri) {}



    function setURI(string memory uri) external onlyOwner {

        _setURI(uri);

    }



    function setStartDate(uint32 timestamp) external onlyOwner {

        startDate = timestamp;

    }



    function saleIsActive() public view returns (bool) {

        return startDate <= block.timestamp;

    }



    function mint(address to, uint32 count) internal {

        totalSupply += count;



        if (count > 1) {

            uint256[] memory ids = new uint256[](uint256(count));

            uint256[] memory amounts = new uint256[](uint256(count));



            for (uint32 i = 0; i < count; i++) {

                ids[i] = totalSupply - count + i;

                amounts[i] = 1;

            }



            _mintBatch(to, ids, amounts, "");

        } else {

            _mint(to, totalSupply - 1, 1, "");

        }

    }



    function mint(uint32 count) external payable {

        require(saleIsActive(), "Sale is not active.");

        require(count > 0, "Count must be greater than 0.");

        require(

            totalSupply + count <= maxSupply,

            "Count exceeds the maximum allowed supply."

        );

        require(msg.value >= unitPrice * count, "Not enough ether.");



        mint(msg.sender, count);

    }



    function batchMint(address[] memory addresses) external onlyOwner {

        require(

            totalSupply + addresses.length <= maxSupply,

            "Count exceeds the maximum allowed supply."

        );



        for (uint256 i = 0; i < addresses.length; i++) {

            mint(addresses[i], 1);

        }

    }



    function withdraw() external onlyOwner {

        address[3] memory addresses = [

            0xaaeb01acdAeCEaB3A69C5B77134d5456c018291E,

            0x043057782C29BC08950E32c475A3B5273c2021d0,

            0x581b0CC5d9fA5A776821689C3e221f5EB1305CB3

        ];



        uint32[3] memory shares = [uint32(1500), uint32(1500), uint32(7000)];



        uint256 balance = address(this).balance;



        for (uint32 i = 0; i < addresses.length; i++) {

            uint256 amount = i == addresses.length - 1

                ? address(this).balance

                : (balance * shares[i]) / 10000;

            payable(addresses[i]).transfer(amount);

        }

    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"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":"addresses","type":"address[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setStartDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startDate","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unitPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526362156208600360146101000a81548163ffffffff021916908363ffffffff1602179055506000600360186101000a81548163ffffffff021916908363ffffffff1602179055503480156200005857600080fd5b50604051620044d5380380620044d583398181016040528101906200007e9190620002d0565b806200009081620000b860201b60201c565b50620000b1620000a5620000d460201b60201c565b620000dc60201b60201c565b50620004a5565b8060029080519060200190620000d0929190620001a2565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001b090620003b6565b90600052602060002090601f016020900481019282620001d4576000855562000220565b82601f10620001ef57805160ff191683800117855562000220565b8280016001018555821562000220579182015b828111156200021f57825182559160200191906001019062000202565b5b5090506200022f919062000233565b5090565b5b808211156200024e57600081600090555060010162000234565b5090565b60006200026962000263846200034a565b62000321565b90508281526020810184848401111562000288576200028762000485565b5b6200029584828562000380565b509392505050565b600082601f830112620002b557620002b462000480565b5b8151620002c784826020860162000252565b91505092915050565b600060208284031215620002e957620002e86200048f565b5b600082015167ffffffffffffffff8111156200030a57620003096200048a565b5b62000318848285016200029d565b91505092915050565b60006200032d62000340565b90506200033b8282620003ec565b919050565b6000604051905090565b600067ffffffffffffffff82111562000368576200036762000451565b5b620003738262000494565b9050602081019050919050565b60005b83811015620003a057808201518184015260208101905062000383565b83811115620003b0576000848401525b50505050565b60006002820490506001821680620003cf57607f821691505b60208210811415620003e657620003e562000422565b5b50919050565b620003f78262000494565b810181811067ffffffffffffffff8211171562000419576200041862000451565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61402080620004b56000396000f3fe60806040526004361061013f5760003560e01c80638da5cb5b116100b6578063d67b06c11161006f578063d67b06c114610428578063e73faa2d14610451578063e985e9c51461047c578063eb8d2444146104b9578063f242432a146104e4578063f2fde38b1461050d5761013f565b80638da5cb5b1461033957806395d89b4114610364578063a22cb4651461038f578063a71bbebe146103b8578063c373c0ef146103d4578063d5abeb01146103fd5761013f565b80630e89341c116101085780630e89341c1461023d57806318160ddd1461027a5780632eb2c2d6146102a55780633ccfd60b146102ce5780634e1273f4146102e5578063715018a6146103225761013f565b8062fdd58e1461014457806301ffc9a71461018157806302fe5305146101be57806306fdde03146101e75780630b97bc8614610212575b600080fd5b34801561015057600080fd5b5061016b60048036038101906101669190612b0e565b610536565b6040516101789190613425565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a39190612c0f565b6105ff565b6040516101b591906131c8565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e09190612c69565b6106e1565b005b3480156101f357600080fd5b506101fc610769565b60405161020991906131e3565b60405180910390f35b34801561021e57600080fd5b506102276107a2565b6040516102349190613469565b60405180910390f35b34801561024957600080fd5b50610264600480360381019061025f9190612cb2565b6107b8565b60405161027191906131e3565b60405180910390f35b34801561028657600080fd5b5061028f61084c565b60405161029c9190613469565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612968565b610862565b005b3480156102da57600080fd5b506102e3610903565b005b3480156102f157600080fd5b5061030c60048036038101906103079190612b97565b610b9d565b604051610319919061316f565b60405180910390f35b34801561032e57600080fd5b50610337610cb6565b005b34801561034557600080fd5b5061034e610d3e565b60405161035b9190613092565b60405180910390f35b34801561037057600080fd5b50610379610d68565b60405161038691906131e3565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190612ace565b610da1565b005b6103d260048036038101906103cd9190612cdf565b610db7565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190612cdf565b610f1d565b005b34801561040957600080fd5b50610412610fbd565b60405161041f9190613469565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190612b4e565b610fc3565b005b34801561045d57600080fd5b506104666110f6565b6040516104739190613425565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e9190612928565b611101565b6040516104b091906131c8565b60405180910390f35b3480156104c557600080fd5b506104ce611195565b6040516104db91906131c8565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190612a37565b6111b8565b005b34801561051957600080fd5b50610534600480360381019061052f91906128fb565b611259565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059e90613245565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ca57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106da57506106d982611351565b5b9050919050565b6106e96113bb565b73ffffffffffffffffffffffffffffffffffffffff16610707610d3e565b73ffffffffffffffffffffffffffffffffffffffff161461075d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075490613365565b60405180910390fd5b610766816113c3565b50565b6040518060400160405280600b81526020017f4d656d626572205061737300000000000000000000000000000000000000000081525081565b600360149054906101000a900463ffffffff1681565b6060600280546107c79061381d565b80601f01602080910402602001604051908101604052809291908181526020018280546107f39061381d565b80156108405780601f1061081557610100808354040283529160200191610840565b820191906000526020600020905b81548152906001019060200180831161082357829003601f168201915b50505050509050919050565b600360189054906101000a900463ffffffff1681565b61086a6113bb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108b057506108af856108aa6113bb565b611101565b5b6108ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e690613305565b60405180910390fd5b6108fc85858585856113dd565b5050505050565b61090b6113bb565b73ffffffffffffffffffffffffffffffffffffffff16610929610d3e565b73ffffffffffffffffffffffffffffffffffffffff161461097f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097690613365565b60405180910390fd5b6000604051806060016040528073aaeb01acdaeceab3a69c5b77134d5456c018291e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173043057782c29bc08950e32c475a3b5273c2021d073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173581b0cc5d9fa5a776821689c3e221f5eb1305cb373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050600060405180606001604052806105dc63ffffffff1663ffffffff1681526020016105dc63ffffffff1663ffffffff168152602001611b5863ffffffff1663ffffffff168152509050600047905060005b60038163ffffffff161015610b9757600060016003610ace91906136ef565b8263ffffffff1614610b1b57612710848363ffffffff1660038110610af657610af5613983565b5b602002015163ffffffff1684610b0c9190613695565b610b169190613664565b610b1d565b475b9050848263ffffffff1660038110610b3857610b37613983565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b82573d6000803e3d6000fd5b50508080610b8f906138c9565b915050610aaf565b50505050565b60608151835114610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda906133c5565b60405180910390fd5b6000835167ffffffffffffffff811115610c0057610bff6139b2565b5b604051908082528060200260200182016040528015610c2e5781602001602082028036833780820191505090505b50905060005b8451811015610cab57610c7b858281518110610c5357610c52613983565b5b6020026020010151858381518110610c6e57610c6d613983565b5b6020026020010151610536565b828281518110610c8e57610c8d613983565b5b60200260200101818152505080610ca490613880565b9050610c34565b508091505092915050565b610cbe6113bb565b73ffffffffffffffffffffffffffffffffffffffff16610cdc610d3e565b73ffffffffffffffffffffffffffffffffffffffff1614610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990613365565b60405180910390fd5b610d3c60006116f1565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600281526020017f4d5000000000000000000000000000000000000000000000000000000000000081525081565b610db3610dac6113bb565b83836117b7565b5050565b610dbf611195565b610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590613385565b60405180910390fd5b60008163ffffffff1611610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e906132a5565b60405180910390fd5b6115b363ffffffff1681600360189054906101000a900463ffffffff16610e6e919061362a565b63ffffffff161115610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac90613345565b60405180910390fd5b8063ffffffff16669536c708910000610ece9190613695565b341015610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f07906132c5565b60405180910390fd5b610f1a3382611924565b50565b610f256113bb565b73ffffffffffffffffffffffffffffffffffffffff16610f43610d3e565b73ffffffffffffffffffffffffffffffffffffffff1614610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9090613365565b60405180910390fd5b80600360146101000a81548163ffffffff021916908363ffffffff16021790555050565b6115b381565b610fcb6113bb565b73ffffffffffffffffffffffffffffffffffffffff16610fe9610d3e565b73ffffffffffffffffffffffffffffffffffffffff161461103f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103690613365565b60405180910390fd5b6115b363ffffffff168151600360189054906101000a900463ffffffff1663ffffffff1661106d91906135d4565b11156110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a590613345565b60405180910390fd5b60005b81518110156110f2576110df8282815181106110d0576110cf613983565b5b60200260200101516001611924565b80806110ea90613880565b9150506110b1565b5050565b669536c70891000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600042600360149054906101000a900463ffffffff1663ffffffff161115905090565b6111c06113bb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806112065750611205856112006113bb565b611101565b5b611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c90613285565b60405180910390fd5b6112528585858585611b25565b5050505050565b6112616113bb565b73ffffffffffffffffffffffffffffffffffffffff1661127f610d3e565b73ffffffffffffffffffffffffffffffffffffffff16146112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90613365565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133c90613265565b60405180910390fd5b61134e816116f1565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600290805190602001906113d99291906125be565b5050565b8151835114611421576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611418906133e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611491576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611488906132e5565b60405180910390fd5b600061149b6113bb565b90506114ab818787878787611da7565b60005b845181101561165c5760008582815181106114cc576114cb613983565b5b6020026020010151905060008583815181106114eb576114ea613983565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158390613325565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461164191906135d4565b925050819055505050508061165590613880565b90506114ae565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116d3929190613191565b60405180910390a46116e9818787878787611daf565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d906133a5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161191791906131c8565b60405180910390a3505050565b80600360188282829054906101000a900463ffffffff16611945919061362a565b92506101000a81548163ffffffff021916908363ffffffff16021790555060018163ffffffff161115611ae05760008163ffffffff1667ffffffffffffffff811115611994576119936139b2565b5b6040519080825280602002602001820160405280156119c25781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff8111156119e7576119e66139b2565b5b604051908082528060200260200182016040528015611a155781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff161015611abd578084600360189054906101000a900463ffffffff16611a4e9190613723565b611a58919061362a565b63ffffffff16838263ffffffff1681518110611a7757611a76613983565b5b6020026020010181815250506001828263ffffffff1681518110611a9e57611a9d613983565b5b6020026020010181815250508080611ab5906138c9565b915050611a1b565b50611ad984838360405180602001604052806000815250611f96565b5050611b21565b611b20826001600360189054906101000a900463ffffffff16611b039190613723565b63ffffffff166001604051806020016040528060008152506121b4565b5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c906132e5565b60405180910390fd5b6000611b9f6113bb565b9050611bbf818787611bb08861234a565b611bb98861234a565b87611da7565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4d90613325565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d0b91906135d4565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611d88929190613440565b60405180910390a4611d9e8288888888886123c4565b50505050505050565b505050505050565b611dce8473ffffffffffffffffffffffffffffffffffffffff166125ab565b15611f8e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611e149594939291906130ad565b602060405180830381600087803b158015611e2e57600080fd5b505af1925050508015611e5f57506040513d601f19601f82011682018060405250810190611e5c9190612c3c565b60015b611f0557611e6b6139e1565b806308c379a01415611ec85750611e80613ee1565b80611e8b5750611eca565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf91906131e3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efc90613205565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8390613225565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd90613405565b60405180910390fd5b815183511461204a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612041906133e5565b60405180910390fd5b60006120546113bb565b905061206581600087878787611da7565b60005b845181101561211e5783818151811061208457612083613983565b5b60200260200101516000808784815181106120a2576120a1613983565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461210491906135d4565b92505081905550808061211690613880565b915050612068565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612196929190613191565b60405180910390a46121ad81600087878787611daf565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b90613405565b60405180910390fd5b600061222e6113bb565b905061224f816000876122408861234a565b6122498861234a565b87611da7565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122ae91906135d4565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161232c929190613440565b60405180910390a4612343816000878787876123c4565b5050505050565b60606000600167ffffffffffffffff811115612369576123686139b2565b5b6040519080825280602002602001820160405280156123975781602001602082028036833780820191505090505b50905082816000815181106123af576123ae613983565b5b60200260200101818152505080915050919050565b6123e38473ffffffffffffffffffffffffffffffffffffffff166125ab565b156125a3578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612429959493929190613115565b602060405180830381600087803b15801561244357600080fd5b505af192505050801561247457506040513d601f19601f820116820180604052508101906124719190612c3c565b60015b61251a576124806139e1565b806308c379a014156124dd5750612495613ee1565b806124a057506124df565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d491906131e3565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190613205565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146125a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259890613225565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b8280546125ca9061381d565b90600052602060002090601f0160209004810192826125ec5760008555612633565b82601f1061260557805160ff1916838001178555612633565b82800160010185558215612633579182015b82811115612632578251825591602001919060010190612617565b5b5090506126409190612644565b5090565b5b8082111561265d576000816000905550600101612645565b5090565b600061267461266f846134a9565b613484565b9050808382526020820190508285602086028201111561269757612696613a08565b5b60005b858110156126c757816126ad88826127c5565b84526020840193506020830192505060018101905061269a565b5050509392505050565b60006126e46126df846134d5565b613484565b9050808382526020820190508285602086028201111561270757612706613a08565b5b60005b85811015612737578161271d88826128d1565b84526020840193506020830192505060018101905061270a565b5050509392505050565b600061275461274f84613501565b613484565b9050828152602081018484840111156127705761276f613a0d565b5b61277b8482856137db565b509392505050565b600061279661279184613532565b613484565b9050828152602081018484840111156127b2576127b1613a0d565b5b6127bd8482856137db565b509392505050565b6000813590506127d481613f77565b92915050565b600082601f8301126127ef576127ee613a03565b5b81356127ff848260208601612661565b91505092915050565b600082601f83011261281d5761281c613a03565b5b813561282d8482602086016126d1565b91505092915050565b60008135905061284581613f8e565b92915050565b60008135905061285a81613fa5565b92915050565b60008151905061286f81613fa5565b92915050565b600082601f83011261288a57612889613a03565b5b813561289a848260208601612741565b91505092915050565b600082601f8301126128b8576128b7613a03565b5b81356128c8848260208601612783565b91505092915050565b6000813590506128e081613fbc565b92915050565b6000813590506128f581613fd3565b92915050565b60006020828403121561291157612910613a17565b5b600061291f848285016127c5565b91505092915050565b6000806040838503121561293f5761293e613a17565b5b600061294d858286016127c5565b925050602061295e858286016127c5565b9150509250929050565b600080600080600060a0868803121561298457612983613a17565b5b6000612992888289016127c5565b95505060206129a3888289016127c5565b945050604086013567ffffffffffffffff8111156129c4576129c3613a12565b5b6129d088828901612808565b935050606086013567ffffffffffffffff8111156129f1576129f0613a12565b5b6129fd88828901612808565b925050608086013567ffffffffffffffff811115612a1e57612a1d613a12565b5b612a2a88828901612875565b9150509295509295909350565b600080600080600060a08688031215612a5357612a52613a17565b5b6000612a61888289016127c5565b9550506020612a72888289016127c5565b9450506040612a83888289016128d1565b9350506060612a94888289016128d1565b925050608086013567ffffffffffffffff811115612ab557612ab4613a12565b5b612ac188828901612875565b9150509295509295909350565b60008060408385031215612ae557612ae4613a17565b5b6000612af3858286016127c5565b9250506020612b0485828601612836565b9150509250929050565b60008060408385031215612b2557612b24613a17565b5b6000612b33858286016127c5565b9250506020612b44858286016128d1565b9150509250929050565b600060208284031215612b6457612b63613a17565b5b600082013567ffffffffffffffff811115612b8257612b81613a12565b5b612b8e848285016127da565b91505092915050565b60008060408385031215612bae57612bad613a17565b5b600083013567ffffffffffffffff811115612bcc57612bcb613a12565b5b612bd8858286016127da565b925050602083013567ffffffffffffffff811115612bf957612bf8613a12565b5b612c0585828601612808565b9150509250929050565b600060208284031215612c2557612c24613a17565b5b6000612c338482850161284b565b91505092915050565b600060208284031215612c5257612c51613a17565b5b6000612c6084828501612860565b91505092915050565b600060208284031215612c7f57612c7e613a17565b5b600082013567ffffffffffffffff811115612c9d57612c9c613a12565b5b612ca9848285016128a3565b91505092915050565b600060208284031215612cc857612cc7613a17565b5b6000612cd6848285016128d1565b91505092915050565b600060208284031215612cf557612cf4613a17565b5b6000612d03848285016128e6565b91505092915050565b6000612d188383613065565b60208301905092915050565b612d2d81613757565b82525050565b6000612d3e82613573565b612d4881856135a1565b9350612d5383613563565b8060005b83811015612d84578151612d6b8882612d0c565b9750612d7683613594565b925050600181019050612d57565b5085935050505092915050565b612d9a81613769565b82525050565b6000612dab8261357e565b612db581856135b2565b9350612dc58185602086016137ea565b612dce81613a1c565b840191505092915050565b6000612de482613589565b612dee81856135c3565b9350612dfe8185602086016137ea565b612e0781613a1c565b840191505092915050565b6000612e1f6034836135c3565b9150612e2a82613a3a565b604082019050919050565b6000612e426028836135c3565b9150612e4d82613a89565b604082019050919050565b6000612e65602b836135c3565b9150612e7082613ad8565b604082019050919050565b6000612e886026836135c3565b9150612e9382613b27565b604082019050919050565b6000612eab6029836135c3565b9150612eb682613b76565b604082019050919050565b6000612ece601d836135c3565b9150612ed982613bc5565b602082019050919050565b6000612ef16011836135c3565b9150612efc82613bee565b602082019050919050565b6000612f146025836135c3565b9150612f1f82613c17565b604082019050919050565b6000612f376032836135c3565b9150612f4282613c66565b604082019050919050565b6000612f5a602a836135c3565b9150612f6582613cb5565b604082019050919050565b6000612f7d6029836135c3565b9150612f8882613d04565b604082019050919050565b6000612fa06020836135c3565b9150612fab82613d53565b602082019050919050565b6000612fc36013836135c3565b9150612fce82613d7c565b602082019050919050565b6000612fe66029836135c3565b9150612ff182613da5565b604082019050919050565b60006130096029836135c3565b915061301482613df4565b604082019050919050565b600061302c6028836135c3565b915061303782613e43565b604082019050919050565b600061304f6021836135c3565b915061305a82613e92565b604082019050919050565b61306e816137c1565b82525050565b61307d816137c1565b82525050565b61308c816137cb565b82525050565b60006020820190506130a76000830184612d24565b92915050565b600060a0820190506130c26000830188612d24565b6130cf6020830187612d24565b81810360408301526130e18186612d33565b905081810360608301526130f58185612d33565b905081810360808301526131098184612da0565b90509695505050505050565b600060a08201905061312a6000830188612d24565b6131376020830187612d24565b6131446040830186613074565b6131516060830185613074565b81810360808301526131638184612da0565b90509695505050505050565b600060208201905081810360008301526131898184612d33565b905092915050565b600060408201905081810360008301526131ab8185612d33565b905081810360208301526131bf8184612d33565b90509392505050565b60006020820190506131dd6000830184612d91565b92915050565b600060208201905081810360008301526131fd8184612dd9565b905092915050565b6000602082019050818103600083015261321e81612e12565b9050919050565b6000602082019050818103600083015261323e81612e35565b9050919050565b6000602082019050818103600083015261325e81612e58565b9050919050565b6000602082019050818103600083015261327e81612e7b565b9050919050565b6000602082019050818103600083015261329e81612e9e565b9050919050565b600060208201905081810360008301526132be81612ec1565b9050919050565b600060208201905081810360008301526132de81612ee4565b9050919050565b600060208201905081810360008301526132fe81612f07565b9050919050565b6000602082019050818103600083015261331e81612f2a565b9050919050565b6000602082019050818103600083015261333e81612f4d565b9050919050565b6000602082019050818103600083015261335e81612f70565b9050919050565b6000602082019050818103600083015261337e81612f93565b9050919050565b6000602082019050818103600083015261339e81612fb6565b9050919050565b600060208201905081810360008301526133be81612fd9565b9050919050565b600060208201905081810360008301526133de81612ffc565b9050919050565b600060208201905081810360008301526133fe8161301f565b9050919050565b6000602082019050818103600083015261341e81613042565b9050919050565b600060208201905061343a6000830184613074565b92915050565b60006040820190506134556000830185613074565b6134626020830184613074565b9392505050565b600060208201905061347e6000830184613083565b92915050565b600061348e61349f565b905061349a828261384f565b919050565b6000604051905090565b600067ffffffffffffffff8211156134c4576134c36139b2565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134f0576134ef6139b2565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561351c5761351b6139b2565b5b61352582613a1c565b9050602081019050919050565b600067ffffffffffffffff82111561354d5761354c6139b2565b5b61355682613a1c565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006135df826137c1565b91506135ea836137c1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561361f5761361e6138f6565b5b828201905092915050565b6000613635826137cb565b9150613640836137cb565b92508263ffffffff03821115613659576136586138f6565b5b828201905092915050565b600061366f826137c1565b915061367a836137c1565b92508261368a57613689613925565b5b828204905092915050565b60006136a0826137c1565b91506136ab836137c1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136e4576136e36138f6565b5b828202905092915050565b60006136fa826137c1565b9150613705836137c1565b925082821015613718576137176138f6565b5b828203905092915050565b600061372e826137cb565b9150613739836137cb565b92508282101561374c5761374b6138f6565b5b828203905092915050565b6000613762826137a1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b838110156138085780820151818401526020810190506137ed565b83811115613817576000848401525b50505050565b6000600282049050600182168061383557607f821691505b6020821081141561384957613848613954565b5b50919050565b61385882613a1c565b810181811067ffffffffffffffff82111715613877576138766139b2565b5b80604052505050565b600061388b826137c1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138be576138bd6138f6565b5b600182019050919050565b60006138d4826137cb565b915063ffffffff8214156138eb576138ea6138f6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613a005760046000803e6139fd600051613a2d565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973206e6f74206163746976652e00000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613ef157613f74565b613ef961349f565b60043d036004823e80513d602482011167ffffffffffffffff82111715613f21575050613f74565b808201805167ffffffffffffffff811115613f3f5750505050613f74565b80602083010160043d038501811115613f5c575050505050613f74565b613f6b8260200185018661384f565b82955050505050505b90565b613f8081613757565b8114613f8b57600080fd5b50565b613f9781613769565b8114613fa257600080fd5b50565b613fae81613775565b8114613fb957600080fd5b50565b613fc5816137c1565b8114613fd057600080fd5b50565b613fdc816137cb565b8114613fe757600080fd5b5056fea26469706673582212203a6085d7c7886b9927aac05554efcaa256ad8096e584eea13a5065258d611bf764736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005c68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f697066732f516d566e683543666b314d6f746972367644635154794667344476745a61756d436831457973534165556a4261412f7b69647d2e6a736f6e00000000

Deployed Bytecode

0x60806040526004361061013f5760003560e01c80638da5cb5b116100b6578063d67b06c11161006f578063d67b06c114610428578063e73faa2d14610451578063e985e9c51461047c578063eb8d2444146104b9578063f242432a146104e4578063f2fde38b1461050d5761013f565b80638da5cb5b1461033957806395d89b4114610364578063a22cb4651461038f578063a71bbebe146103b8578063c373c0ef146103d4578063d5abeb01146103fd5761013f565b80630e89341c116101085780630e89341c1461023d57806318160ddd1461027a5780632eb2c2d6146102a55780633ccfd60b146102ce5780634e1273f4146102e5578063715018a6146103225761013f565b8062fdd58e1461014457806301ffc9a71461018157806302fe5305146101be57806306fdde03146101e75780630b97bc8614610212575b600080fd5b34801561015057600080fd5b5061016b60048036038101906101669190612b0e565b610536565b6040516101789190613425565b60405180910390f35b34801561018d57600080fd5b506101a860048036038101906101a39190612c0f565b6105ff565b6040516101b591906131c8565b60405180910390f35b3480156101ca57600080fd5b506101e560048036038101906101e09190612c69565b6106e1565b005b3480156101f357600080fd5b506101fc610769565b60405161020991906131e3565b60405180910390f35b34801561021e57600080fd5b506102276107a2565b6040516102349190613469565b60405180910390f35b34801561024957600080fd5b50610264600480360381019061025f9190612cb2565b6107b8565b60405161027191906131e3565b60405180910390f35b34801561028657600080fd5b5061028f61084c565b60405161029c9190613469565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190612968565b610862565b005b3480156102da57600080fd5b506102e3610903565b005b3480156102f157600080fd5b5061030c60048036038101906103079190612b97565b610b9d565b604051610319919061316f565b60405180910390f35b34801561032e57600080fd5b50610337610cb6565b005b34801561034557600080fd5b5061034e610d3e565b60405161035b9190613092565b60405180910390f35b34801561037057600080fd5b50610379610d68565b60405161038691906131e3565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b19190612ace565b610da1565b005b6103d260048036038101906103cd9190612cdf565b610db7565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190612cdf565b610f1d565b005b34801561040957600080fd5b50610412610fbd565b60405161041f9190613469565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a9190612b4e565b610fc3565b005b34801561045d57600080fd5b506104666110f6565b6040516104739190613425565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e9190612928565b611101565b6040516104b091906131c8565b60405180910390f35b3480156104c557600080fd5b506104ce611195565b6040516104db91906131c8565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190612a37565b6111b8565b005b34801561051957600080fd5b50610534600480360381019061052f91906128fb565b611259565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156105a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059e90613245565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106ca57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106da57506106d982611351565b5b9050919050565b6106e96113bb565b73ffffffffffffffffffffffffffffffffffffffff16610707610d3e565b73ffffffffffffffffffffffffffffffffffffffff161461075d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075490613365565b60405180910390fd5b610766816113c3565b50565b6040518060400160405280600b81526020017f4d656d626572205061737300000000000000000000000000000000000000000081525081565b600360149054906101000a900463ffffffff1681565b6060600280546107c79061381d565b80601f01602080910402602001604051908101604052809291908181526020018280546107f39061381d565b80156108405780601f1061081557610100808354040283529160200191610840565b820191906000526020600020905b81548152906001019060200180831161082357829003601f168201915b50505050509050919050565b600360189054906101000a900463ffffffff1681565b61086a6113bb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806108b057506108af856108aa6113bb565b611101565b5b6108ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e690613305565b60405180910390fd5b6108fc85858585856113dd565b5050505050565b61090b6113bb565b73ffffffffffffffffffffffffffffffffffffffff16610929610d3e565b73ffffffffffffffffffffffffffffffffffffffff161461097f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097690613365565b60405180910390fd5b6000604051806060016040528073aaeb01acdaeceab3a69c5b77134d5456c018291e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173043057782c29bc08950e32c475a3b5273c2021d073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173581b0cc5d9fa5a776821689c3e221f5eb1305cb373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152509050600060405180606001604052806105dc63ffffffff1663ffffffff1681526020016105dc63ffffffff1663ffffffff168152602001611b5863ffffffff1663ffffffff168152509050600047905060005b60038163ffffffff161015610b9757600060016003610ace91906136ef565b8263ffffffff1614610b1b57612710848363ffffffff1660038110610af657610af5613983565b5b602002015163ffffffff1684610b0c9190613695565b610b169190613664565b610b1d565b475b9050848263ffffffff1660038110610b3857610b37613983565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610b82573d6000803e3d6000fd5b50508080610b8f906138c9565b915050610aaf565b50505050565b60608151835114610be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bda906133c5565b60405180910390fd5b6000835167ffffffffffffffff811115610c0057610bff6139b2565b5b604051908082528060200260200182016040528015610c2e5781602001602082028036833780820191505090505b50905060005b8451811015610cab57610c7b858281518110610c5357610c52613983565b5b6020026020010151858381518110610c6e57610c6d613983565b5b6020026020010151610536565b828281518110610c8e57610c8d613983565b5b60200260200101818152505080610ca490613880565b9050610c34565b508091505092915050565b610cbe6113bb565b73ffffffffffffffffffffffffffffffffffffffff16610cdc610d3e565b73ffffffffffffffffffffffffffffffffffffffff1614610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990613365565b60405180910390fd5b610d3c60006116f1565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600281526020017f4d5000000000000000000000000000000000000000000000000000000000000081525081565b610db3610dac6113bb565b83836117b7565b5050565b610dbf611195565b610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590613385565b60405180910390fd5b60008163ffffffff1611610e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3e906132a5565b60405180910390fd5b6115b363ffffffff1681600360189054906101000a900463ffffffff16610e6e919061362a565b63ffffffff161115610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac90613345565b60405180910390fd5b8063ffffffff16669536c708910000610ece9190613695565b341015610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f07906132c5565b60405180910390fd5b610f1a3382611924565b50565b610f256113bb565b73ffffffffffffffffffffffffffffffffffffffff16610f43610d3e565b73ffffffffffffffffffffffffffffffffffffffff1614610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9090613365565b60405180910390fd5b80600360146101000a81548163ffffffff021916908363ffffffff16021790555050565b6115b381565b610fcb6113bb565b73ffffffffffffffffffffffffffffffffffffffff16610fe9610d3e565b73ffffffffffffffffffffffffffffffffffffffff161461103f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103690613365565b60405180910390fd5b6115b363ffffffff168151600360189054906101000a900463ffffffff1663ffffffff1661106d91906135d4565b11156110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a590613345565b60405180910390fd5b60005b81518110156110f2576110df8282815181106110d0576110cf613983565b5b60200260200101516001611924565b80806110ea90613880565b9150506110b1565b5050565b669536c70891000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600042600360149054906101000a900463ffffffff1663ffffffff161115905090565b6111c06113bb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806112065750611205856112006113bb565b611101565b5b611245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123c90613285565b60405180910390fd5b6112528585858585611b25565b5050505050565b6112616113bb565b73ffffffffffffffffffffffffffffffffffffffff1661127f610d3e565b73ffffffffffffffffffffffffffffffffffffffff16146112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90613365565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611345576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133c90613265565b60405180910390fd5b61134e816116f1565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b80600290805190602001906113d99291906125be565b5050565b8151835114611421576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611418906133e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611491576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611488906132e5565b60405180910390fd5b600061149b6113bb565b90506114ab818787878787611da7565b60005b845181101561165c5760008582815181106114cc576114cb613983565b5b6020026020010151905060008583815181106114eb576114ea613983565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158390613325565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461164191906135d4565b925050819055505050508061165590613880565b90506114ae565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116d3929190613191565b60405180910390a46116e9818787878787611daf565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181d906133a5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161191791906131c8565b60405180910390a3505050565b80600360188282829054906101000a900463ffffffff16611945919061362a565b92506101000a81548163ffffffff021916908363ffffffff16021790555060018163ffffffff161115611ae05760008163ffffffff1667ffffffffffffffff811115611994576119936139b2565b5b6040519080825280602002602001820160405280156119c25781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff8111156119e7576119e66139b2565b5b604051908082528060200260200182016040528015611a155781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff161015611abd578084600360189054906101000a900463ffffffff16611a4e9190613723565b611a58919061362a565b63ffffffff16838263ffffffff1681518110611a7757611a76613983565b5b6020026020010181815250506001828263ffffffff1681518110611a9e57611a9d613983565b5b6020026020010181815250508080611ab5906138c9565b915050611a1b565b50611ad984838360405180602001604052806000815250611f96565b5050611b21565b611b20826001600360189054906101000a900463ffffffff16611b039190613723565b63ffffffff166001604051806020016040528060008152506121b4565b5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c906132e5565b60405180910390fd5b6000611b9f6113bb565b9050611bbf818787611bb08861234a565b611bb98861234a565b87611da7565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4d90613325565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d0b91906135d4565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611d88929190613440565b60405180910390a4611d9e8288888888886123c4565b50505050505050565b505050505050565b611dce8473ffffffffffffffffffffffffffffffffffffffff166125ab565b15611f8e578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611e149594939291906130ad565b602060405180830381600087803b158015611e2e57600080fd5b505af1925050508015611e5f57506040513d601f19601f82011682018060405250810190611e5c9190612c3c565b60015b611f0557611e6b6139e1565b806308c379a01415611ec85750611e80613ee1565b80611e8b5750611eca565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf91906131e3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efc90613205565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8390613225565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd90613405565b60405180910390fd5b815183511461204a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612041906133e5565b60405180910390fd5b60006120546113bb565b905061206581600087878787611da7565b60005b845181101561211e5783818151811061208457612083613983565b5b60200260200101516000808784815181106120a2576120a1613983565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461210491906135d4565b92505081905550808061211690613880565b915050612068565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612196929190613191565b60405180910390a46121ad81600087878787611daf565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b90613405565b60405180910390fd5b600061222e6113bb565b905061224f816000876122408861234a565b6122498861234a565b87611da7565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122ae91906135d4565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161232c929190613440565b60405180910390a4612343816000878787876123c4565b5050505050565b60606000600167ffffffffffffffff811115612369576123686139b2565b5b6040519080825280602002602001820160405280156123975781602001602082028036833780820191505090505b50905082816000815181106123af576123ae613983565b5b60200260200101818152505080915050919050565b6123e38473ffffffffffffffffffffffffffffffffffffffff166125ab565b156125a3578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612429959493929190613115565b602060405180830381600087803b15801561244357600080fd5b505af192505050801561247457506040513d601f19601f820116820180604052508101906124719190612c3c565b60015b61251a576124806139e1565b806308c379a014156124dd5750612495613ee1565b806124a057506124df565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d491906131e3565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251190613205565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146125a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259890613225565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b8280546125ca9061381d565b90600052602060002090601f0160209004810192826125ec5760008555612633565b82601f1061260557805160ff1916838001178555612633565b82800160010185558215612633579182015b82811115612632578251825591602001919060010190612617565b5b5090506126409190612644565b5090565b5b8082111561265d576000816000905550600101612645565b5090565b600061267461266f846134a9565b613484565b9050808382526020820190508285602086028201111561269757612696613a08565b5b60005b858110156126c757816126ad88826127c5565b84526020840193506020830192505060018101905061269a565b5050509392505050565b60006126e46126df846134d5565b613484565b9050808382526020820190508285602086028201111561270757612706613a08565b5b60005b85811015612737578161271d88826128d1565b84526020840193506020830192505060018101905061270a565b5050509392505050565b600061275461274f84613501565b613484565b9050828152602081018484840111156127705761276f613a0d565b5b61277b8482856137db565b509392505050565b600061279661279184613532565b613484565b9050828152602081018484840111156127b2576127b1613a0d565b5b6127bd8482856137db565b509392505050565b6000813590506127d481613f77565b92915050565b600082601f8301126127ef576127ee613a03565b5b81356127ff848260208601612661565b91505092915050565b600082601f83011261281d5761281c613a03565b5b813561282d8482602086016126d1565b91505092915050565b60008135905061284581613f8e565b92915050565b60008135905061285a81613fa5565b92915050565b60008151905061286f81613fa5565b92915050565b600082601f83011261288a57612889613a03565b5b813561289a848260208601612741565b91505092915050565b600082601f8301126128b8576128b7613a03565b5b81356128c8848260208601612783565b91505092915050565b6000813590506128e081613fbc565b92915050565b6000813590506128f581613fd3565b92915050565b60006020828403121561291157612910613a17565b5b600061291f848285016127c5565b91505092915050565b6000806040838503121561293f5761293e613a17565b5b600061294d858286016127c5565b925050602061295e858286016127c5565b9150509250929050565b600080600080600060a0868803121561298457612983613a17565b5b6000612992888289016127c5565b95505060206129a3888289016127c5565b945050604086013567ffffffffffffffff8111156129c4576129c3613a12565b5b6129d088828901612808565b935050606086013567ffffffffffffffff8111156129f1576129f0613a12565b5b6129fd88828901612808565b925050608086013567ffffffffffffffff811115612a1e57612a1d613a12565b5b612a2a88828901612875565b9150509295509295909350565b600080600080600060a08688031215612a5357612a52613a17565b5b6000612a61888289016127c5565b9550506020612a72888289016127c5565b9450506040612a83888289016128d1565b9350506060612a94888289016128d1565b925050608086013567ffffffffffffffff811115612ab557612ab4613a12565b5b612ac188828901612875565b9150509295509295909350565b60008060408385031215612ae557612ae4613a17565b5b6000612af3858286016127c5565b9250506020612b0485828601612836565b9150509250929050565b60008060408385031215612b2557612b24613a17565b5b6000612b33858286016127c5565b9250506020612b44858286016128d1565b9150509250929050565b600060208284031215612b6457612b63613a17565b5b600082013567ffffffffffffffff811115612b8257612b81613a12565b5b612b8e848285016127da565b91505092915050565b60008060408385031215612bae57612bad613a17565b5b600083013567ffffffffffffffff811115612bcc57612bcb613a12565b5b612bd8858286016127da565b925050602083013567ffffffffffffffff811115612bf957612bf8613a12565b5b612c0585828601612808565b9150509250929050565b600060208284031215612c2557612c24613a17565b5b6000612c338482850161284b565b91505092915050565b600060208284031215612c5257612c51613a17565b5b6000612c6084828501612860565b91505092915050565b600060208284031215612c7f57612c7e613a17565b5b600082013567ffffffffffffffff811115612c9d57612c9c613a12565b5b612ca9848285016128a3565b91505092915050565b600060208284031215612cc857612cc7613a17565b5b6000612cd6848285016128d1565b91505092915050565b600060208284031215612cf557612cf4613a17565b5b6000612d03848285016128e6565b91505092915050565b6000612d188383613065565b60208301905092915050565b612d2d81613757565b82525050565b6000612d3e82613573565b612d4881856135a1565b9350612d5383613563565b8060005b83811015612d84578151612d6b8882612d0c565b9750612d7683613594565b925050600181019050612d57565b5085935050505092915050565b612d9a81613769565b82525050565b6000612dab8261357e565b612db581856135b2565b9350612dc58185602086016137ea565b612dce81613a1c565b840191505092915050565b6000612de482613589565b612dee81856135c3565b9350612dfe8185602086016137ea565b612e0781613a1c565b840191505092915050565b6000612e1f6034836135c3565b9150612e2a82613a3a565b604082019050919050565b6000612e426028836135c3565b9150612e4d82613a89565b604082019050919050565b6000612e65602b836135c3565b9150612e7082613ad8565b604082019050919050565b6000612e886026836135c3565b9150612e9382613b27565b604082019050919050565b6000612eab6029836135c3565b9150612eb682613b76565b604082019050919050565b6000612ece601d836135c3565b9150612ed982613bc5565b602082019050919050565b6000612ef16011836135c3565b9150612efc82613bee565b602082019050919050565b6000612f146025836135c3565b9150612f1f82613c17565b604082019050919050565b6000612f376032836135c3565b9150612f4282613c66565b604082019050919050565b6000612f5a602a836135c3565b9150612f6582613cb5565b604082019050919050565b6000612f7d6029836135c3565b9150612f8882613d04565b604082019050919050565b6000612fa06020836135c3565b9150612fab82613d53565b602082019050919050565b6000612fc36013836135c3565b9150612fce82613d7c565b602082019050919050565b6000612fe66029836135c3565b9150612ff182613da5565b604082019050919050565b60006130096029836135c3565b915061301482613df4565b604082019050919050565b600061302c6028836135c3565b915061303782613e43565b604082019050919050565b600061304f6021836135c3565b915061305a82613e92565b604082019050919050565b61306e816137c1565b82525050565b61307d816137c1565b82525050565b61308c816137cb565b82525050565b60006020820190506130a76000830184612d24565b92915050565b600060a0820190506130c26000830188612d24565b6130cf6020830187612d24565b81810360408301526130e18186612d33565b905081810360608301526130f58185612d33565b905081810360808301526131098184612da0565b90509695505050505050565b600060a08201905061312a6000830188612d24565b6131376020830187612d24565b6131446040830186613074565b6131516060830185613074565b81810360808301526131638184612da0565b90509695505050505050565b600060208201905081810360008301526131898184612d33565b905092915050565b600060408201905081810360008301526131ab8185612d33565b905081810360208301526131bf8184612d33565b90509392505050565b60006020820190506131dd6000830184612d91565b92915050565b600060208201905081810360008301526131fd8184612dd9565b905092915050565b6000602082019050818103600083015261321e81612e12565b9050919050565b6000602082019050818103600083015261323e81612e35565b9050919050565b6000602082019050818103600083015261325e81612e58565b9050919050565b6000602082019050818103600083015261327e81612e7b565b9050919050565b6000602082019050818103600083015261329e81612e9e565b9050919050565b600060208201905081810360008301526132be81612ec1565b9050919050565b600060208201905081810360008301526132de81612ee4565b9050919050565b600060208201905081810360008301526132fe81612f07565b9050919050565b6000602082019050818103600083015261331e81612f2a565b9050919050565b6000602082019050818103600083015261333e81612f4d565b9050919050565b6000602082019050818103600083015261335e81612f70565b9050919050565b6000602082019050818103600083015261337e81612f93565b9050919050565b6000602082019050818103600083015261339e81612fb6565b9050919050565b600060208201905081810360008301526133be81612fd9565b9050919050565b600060208201905081810360008301526133de81612ffc565b9050919050565b600060208201905081810360008301526133fe8161301f565b9050919050565b6000602082019050818103600083015261341e81613042565b9050919050565b600060208201905061343a6000830184613074565b92915050565b60006040820190506134556000830185613074565b6134626020830184613074565b9392505050565b600060208201905061347e6000830184613083565b92915050565b600061348e61349f565b905061349a828261384f565b919050565b6000604051905090565b600067ffffffffffffffff8211156134c4576134c36139b2565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156134f0576134ef6139b2565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561351c5761351b6139b2565b5b61352582613a1c565b9050602081019050919050565b600067ffffffffffffffff82111561354d5761354c6139b2565b5b61355682613a1c565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006135df826137c1565b91506135ea836137c1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561361f5761361e6138f6565b5b828201905092915050565b6000613635826137cb565b9150613640836137cb565b92508263ffffffff03821115613659576136586138f6565b5b828201905092915050565b600061366f826137c1565b915061367a836137c1565b92508261368a57613689613925565b5b828204905092915050565b60006136a0826137c1565b91506136ab836137c1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136e4576136e36138f6565b5b828202905092915050565b60006136fa826137c1565b9150613705836137c1565b925082821015613718576137176138f6565b5b828203905092915050565b600061372e826137cb565b9150613739836137cb565b92508282101561374c5761374b6138f6565b5b828203905092915050565b6000613762826137a1565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b82818337600083830152505050565b60005b838110156138085780820151818401526020810190506137ed565b83811115613817576000848401525b50505050565b6000600282049050600182168061383557607f821691505b6020821081141561384957613848613954565b5b50919050565b61385882613a1c565b810181811067ffffffffffffffff82111715613877576138766139b2565b5b80604052505050565b600061388b826137c1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138be576138bd6138f6565b5b600182019050919050565b60006138d4826137cb565b915063ffffffff8214156138eb576138ea6138f6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613a005760046000803e6139fd600051613a2d565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973206e6f74206163746976652e00000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015613ef157613f74565b613ef961349f565b60043d036004823e80513d602482011167ffffffffffffffff82111715613f21575050613f74565b808201805167ffffffffffffffff811115613f3f5750505050613f74565b80602083010160043d038501811115613f5c575050505050613f74565b613f6b8260200185018661384f565b82955050505050505b90565b613f8081613757565b8114613f8b57600080fd5b50565b613f9781613769565b8114613fa257600080fd5b50565b613fae81613775565b8114613fb957600080fd5b50565b613fc5816137c1565b8114613fd057600080fd5b50565b613fdc816137cb565b8114613fe757600080fd5b5056fea26469706673582212203a6085d7c7886b9927aac05554efcaa256ad8096e584eea13a5065258d611bf764736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005c68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f697066732f516d566e683543666b314d6f746972367644635154794667344476745a61756d436831457973534165556a4261412f7b69647d2e6a736f6e00000000

-----Decoded View---------------
Arg [0] : uri (string): https://buckets.mypinata.cloud/ipfs/QmVnh5Cfk1Motir6vDcQTyFg4DvtZaumCh1EysSAeUjBaA/{id}.json

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000005c
Arg [2] : 68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f69
Arg [3] : 7066732f516d566e683543666b314d6f74697236764463515479466734447674
Arg [4] : 5a61756d436831457973534165556a4261412f7b69647d2e6a736f6e00000000


Deployed Bytecode Sourcemap

36557:2824:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22978:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22001:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36956:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36606:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36707:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22722:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36752:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24917:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38669:707;;;;;;;;;;;;;:::i;:::-;;23375:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2606:103;;;;;;;;;;;;;:::i;:::-;;1955:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36658:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23972:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37868:433;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37057:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36790:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38313:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36838:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24199:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37172:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24439:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2864:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22978:231;23064:7;23111:1;23092:21;;:7;:21;;;;23084:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23179:9;:13;23189:2;23179:13;;;;;;;;;;;:22;23193:7;23179:22;;;;;;;;;;;;;;;;23172:29;;22978:231;;;;:::o;22001:310::-;22103:4;22155:26;22140:41;;;:11;:41;;;;:110;;;;22213:37;22198:52;;;:11;:52;;;;22140:110;:163;;;;22267:36;22291:11;22267:23;:36::i;:::-;22140:163;22120:183;;22001:310;;;:::o;36956:89::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37023:12:::1;37031:3;37023:7;:12::i;:::-;36956:89:::0;:::o;36606:43::-;;;;;;;;;;;;;;;;;;;:::o;36707:36::-;;;;;;;;;;;;;:::o;22722:105::-;22782:13;22815:4;22808:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22722:105;;;:::o;36752:29::-;;;;;;;;;;;;;:::o;24917:442::-;25158:12;:10;:12::i;:::-;25150:20;;:4;:20;;;:60;;;;25174:36;25191:4;25197:12;:10;:12::i;:::-;25174:16;:36::i;:::-;25150:60;25128:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25299:52;25322:4;25328:2;25332:3;25337:7;25346:4;25299:22;:52::i;:::-;24917:442;;;;;:::o;38669:707::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38721:27:::1;:220;;;;;;;;38768:42;38721:220;;;;;;;;38827:42;38721:220;;;;;;;;38886:42;38721:220;;;;;;::::0;::::1;;38958:23;:68;;;;;;;;38992:4;38958:68;;;;;;;;39006:4;38958:68;;;;;;;;39020:4;38958:68;;;;;;::::0;::::1;;39043:15;39061:21;39043:39;;39104:8;39099:268;39122:16;39118:1;:20;;;39099:268;;;39162:14;39203:1;39184:16;:20;;;;:::i;:::-;39179:1;:25;;;:119;;39293:5;39280:6;39287:1;39280:9;;;;;;;;;:::i;:::-;;;;;;39270:19;;:7;:19;;;;:::i;:::-;39269:29;;;;:::i;:::-;39179:119;;;39226:21;39179:119;39162:136;;39323:9;39333:1;39323:12;;;;;;;;;:::i;:::-;;;;;;39315:30;;:38;39346:6;39315:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39145:222;39140:3;;;;;:::i;:::-;;;;39099:268;;;;38708:668;;;38669:707::o:0;23375:524::-;23531:16;23592:3;:10;23573:8;:15;:29;23565:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23661:30;23708:8;:15;23694:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23661:63;;23742:9;23737:122;23761:8;:15;23757:1;:19;23737:122;;;23817:30;23827:8;23836:1;23827:11;;;;;;;;:::i;:::-;;;;;;;;23840:3;23844:1;23840:6;;;;;;;;:::i;:::-;;;;;;;;23817:9;:30::i;:::-;23798:13;23812:1;23798:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23778:3;;;;:::i;:::-;;;23737:122;;;;23878:13;23871:20;;;23375:524;;;;:::o;2606:103::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2671:30:::1;2698:1;2671:18;:30::i;:::-;2606:103::o:0;1955:87::-;2001:7;2028:6;;;;;;;;;;;2021:13;;1955:87;:::o;36658:36::-;;;;;;;;;;;;;;;;;;;:::o;23972:155::-;24067:52;24086:12;:10;:12::i;:::-;24100:8;24110;24067:18;:52::i;:::-;23972:155;;:::o;37868:433::-;37934:14;:12;:14::i;:::-;37926:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;38001:1;37993:5;:9;;;37985:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36825:4;38073:32;;38087:5;38073:11;;;;;;;;;;;:19;;;;:::i;:::-;:32;;;;38049:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;38224:5;38212:17;;36874:11;38212:17;;;;:::i;:::-;38199:9;:30;;38191:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;38268:23;38273:10;38285:5;38268:4;:23::i;:::-;37868:433;:::o;37057:103::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37141:9:::1;37129;;:21;;;;;;;;;;;;;;;;;;37057:103:::0;:::o;36790:39::-;36825:4;36790:39;:::o;38313:344::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36825:4:::1;38416:43;;38430:9;:16;38416:11;;;;;;;;;;;:30;;;;;;:::i;:::-;:43;;38392:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38554:9;38549:99;38573:9;:16;38569:1;:20;38549:99;;;38613:21;38618:9;38628:1;38618:12;;;;;;;;:::i;:::-;;;;;;;;38632:1;38613:4;:21::i;:::-;38591:3;;;;;:::i;:::-;;;;38549:99;;;;38313:344:::0;:::o;36838:47::-;36874:11;36838:47;:::o;24199:168::-;24298:4;24322:18;:27;24341:7;24322:27;;;;;;;;;;;;;;;:37;24350:8;24322:37;;;;;;;;;;;;;;;;;;;;;;;;;24315:44;;24199:168;;;;:::o;37172:109::-;37217:4;37256:15;37243:9;;;;;;;;;;;:28;;;;37236:35;;37172:109;:::o;24439:401::-;24655:12;:10;:12::i;:::-;24647:20;;:4;:20;;;:60;;;;24671:36;24688:4;24694:12;:10;:12::i;:::-;24671:16;:36::i;:::-;24647:60;24625:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24787:45;24805:4;24811:2;24815;24819:6;24827:4;24787:17;:45::i;:::-;24439:401;;;;;:::o;2864:201::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2973:1:::1;2953:22;;:8;:22;;;;2945:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3029:28;3048:8;3029:18;:28::i;:::-;2864:201:::0;:::o;13356:157::-;13441:4;13480:25;13465:40;;;:11;:40;;;;13458:47;;13356:157;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;28919:88::-;28993:6;28986:4;:13;;;;;;;;;;;;:::i;:::-;;28919:88;:::o;27001:1074::-;27228:7;:14;27214:3;:10;:28;27206:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27320:1;27306:16;;:2;:16;;;;27298:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27377:16;27396:12;:10;:12::i;:::-;27377:31;;27421:60;27442:8;27452:4;27458:2;27462:3;27467:7;27476:4;27421:20;:60::i;:::-;27499:9;27494:421;27518:3;:10;27514:1;:14;27494:421;;;27550:10;27563:3;27567:1;27563:6;;;;;;;;:::i;:::-;;;;;;;;27550:19;;27584:14;27601:7;27609:1;27601:10;;;;;;;;:::i;:::-;;;;;;;;27584:27;;27628:19;27650:9;:13;27660:2;27650:13;;;;;;;;;;;:19;27664:4;27650:19;;;;;;;;;;;;;;;;27628:41;;27707:6;27692:11;:21;;27684:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27840:6;27826:11;:20;27804:9;:13;27814:2;27804:13;;;;;;;;;;;:19;27818:4;27804:19;;;;;;;;;;;;;;;:42;;;;27897:6;27876:9;:13;27886:2;27876:13;;;;;;;;;;;:17;27890:2;27876:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27535:380;;;27530:3;;;;:::i;:::-;;;27494:421;;;;27962:2;27932:47;;27956:4;27932:47;;27946:8;27932:47;;;27966:3;27971:7;27932:47;;;;;;;:::i;:::-;;;;;;;;27992:75;28028:8;28038:4;28044:2;28048:3;28053:7;28062:4;27992:35;:75::i;:::-;27195:880;27001:1074;;;;;:::o;3225:191::-;3299:16;3318:6;;;;;;;;;;;3299:25;;3344:8;3335:6;;:17;;;;;;;;;;;;;;;;;;3399:8;3368:40;;3389:8;3368:40;;;;;;;;;;;;3288:128;3225:191;:::o;33187:331::-;33342:8;33333:17;;:5;:17;;;;33325:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33445:8;33407:18;:25;33426:5;33407:25;;;;;;;;;;;;;;;:35;33433:8;33407:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33491:8;33469:41;;33484:5;33469:41;;;33501:8;33469:41;;;;;;:::i;:::-;;;;;;;;33187:331;;;:::o;37293:563::-;37370:5;37355:11;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;37404:1;37396:5;:9;;;37392:455;;;37424:20;37469:5;37461:14;;37447:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37424:52;;37493:24;37542:5;37534:14;;37520:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37493:56;;37575:8;37570:141;37593:5;37589:9;;:1;:9;;;37570:141;;;37657:1;37649:5;37635:11;;;;;;;;;;;:19;;;;:::i;:::-;:23;;;;:::i;:::-;37626:32;;:3;37630:1;37626:6;;;;;;;;;;:::i;:::-;;;;;;;:32;;;;;37692:1;37679:7;37687:1;37679:10;;;;;;;;;;:::i;:::-;;;;;;;:14;;;;;37600:3;;;;;:::i;:::-;;;;37570:141;;;;37731:32;37742:2;37746:3;37751:7;37731:32;;;;;;;;;;;;:10;:32::i;:::-;37407:370;;37392:455;;;37800:33;37806:2;37824:1;37810:11;;;;;;;;;;;:15;;;;:::i;:::-;37800:33;;37827:1;37800:33;;;;;;;;;;;;:5;:33::i;:::-;37392:455;37293:563;;:::o;25823:820::-;26025:1;26011:16;;:2;:16;;;;26003:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26082:16;26101:12;:10;:12::i;:::-;26082:31;;26126:96;26147:8;26157:4;26163:2;26167:21;26185:2;26167:17;:21::i;:::-;26190:25;26208:6;26190:17;:25::i;:::-;26217:4;26126:20;:96::i;:::-;26235:19;26257:9;:13;26267:2;26257:13;;;;;;;;;;;:19;26271:4;26257:19;;;;;;;;;;;;;;;;26235:41;;26310:6;26295:11;:21;;26287:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26435:6;26421:11;:20;26399:9;:13;26409:2;26399:13;;;;;;;;;;;:19;26413:4;26399:19;;;;;;;;;;;;;;;:42;;;;26484:6;26463:9;:13;26473:2;26463:13;;;;;;;;;;;:17;26477:2;26463:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26539:2;26508:46;;26533:4;26508:46;;26523:8;26508:46;;;26543:2;26547:6;26508:46;;;;;;;:::i;:::-;;;;;;;;26567:68;26598:8;26608:4;26614:2;26618;26622:6;26630:4;26567:30;:68::i;:::-;25992:651;;25823:820;;;;;:::o;34474:221::-;;;;;;;:::o;35455:813::-;35695:15;:2;:13;;;:15::i;:::-;35691:570;;;35748:2;35731:43;;;35775:8;35785:4;35791:3;35796:7;35805:4;35731:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35727:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36123:6;36116:14;;;;;;;;;;;:::i;:::-;;;;;;;;35727:523;;;36172:62;;;;;;;;;;:::i;:::-;;;;;;;;35727:523;35904:48;;;35892:60;;;:8;:60;;;;35888:159;;35977:50;;;;;;;;;;:::i;:::-;;;;;;;;35888:159;35811:251;35691:570;35455:813;;;;;;:::o;30318:735::-;30510:1;30496:16;;:2;:16;;;;30488:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30583:7;:14;30569:3;:10;:28;30561:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30655:16;30674:12;:10;:12::i;:::-;30655:31;;30699:66;30720:8;30738:1;30742:2;30746:3;30751:7;30760:4;30699:20;:66::i;:::-;30783:9;30778:103;30802:3;:10;30798:1;:14;30778:103;;;30859:7;30867:1;30859:10;;;;;;;;:::i;:::-;;;;;;;;30834:9;:17;30844:3;30848:1;30844:6;;;;;;;;:::i;:::-;;;;;;;;30834:17;;;;;;;;;;;:21;30852:2;30834:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;30814:3;;;;;:::i;:::-;;;;30778:103;;;;30934:2;30898:53;;30930:1;30898:53;;30912:8;30898:53;;;30938:3;30943:7;30898:53;;;;;;;:::i;:::-;;;;;;;;30964:81;31000:8;31018:1;31022:2;31026:3;31031:7;31040:4;30964:35;:81::i;:::-;30477:576;30318:735;;;;:::o;29393:569::-;29560:1;29546:16;;:2;:16;;;;29538:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29613:16;29632:12;:10;:12::i;:::-;29613:31;;29657:102;29678:8;29696:1;29700:2;29704:21;29722:2;29704:17;:21::i;:::-;29727:25;29745:6;29727:17;:25::i;:::-;29754:4;29657:20;:102::i;:::-;29793:6;29772:9;:13;29782:2;29772:13;;;;;;;;;;;:17;29786:2;29772:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29852:2;29815:52;;29848:1;29815:52;;29830:8;29815:52;;;29856:2;29860:6;29815:52;;;;;;;:::i;:::-;;;;;;;;29880:74;29911:8;29929:1;29933:2;29937;29941:6;29949:4;29880:30;:74::i;:::-;29527:435;29393:569;;;;:::o;36276:198::-;36342:16;36371:22;36410:1;36396:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36371:41;;36434:7;36423:5;36429:1;36423:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;36461:5;36454:12;;;36276:198;;;:::o;34703:744::-;34918:15;:2;:13;;;:15::i;:::-;34914:526;;;34971:2;34954:38;;;34993:8;35003:4;35009:2;35013:6;35021:4;34954:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34950:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35302:6;35295:14;;;;;;;;;;;:::i;:::-;;;;;;;;34950:479;;;35351:62;;;;;;;;;;:::i;:::-;;;;;;;;34950:479;35088:43;;;35076:55;;;:8;:55;;;;35072:154;;35156:50;;;;;;;;;;:::i;:::-;;;;;;;;35072:154;35027:214;34914:526;34703:744;;;;;;:::o;4243:387::-;4303:4;4511:12;4578:7;4566:20;4558:28;;4621:1;4614:4;:8;4607:15;;;4243:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:137::-;4598:5;4636:6;4623:20;4614:29;;4652:32;4678:5;4652:32;:::i;:::-;4553:137;;;;:::o;4696:329::-;4755:6;4804:2;4792:9;4783:7;4779:23;4775:32;4772:119;;;4810:79;;:::i;:::-;4772:119;4930:1;4955:53;5000:7;4991:6;4980:9;4976:22;4955:53;:::i;:::-;4945:63;;4901:117;4696:329;;;;:::o;5031:474::-;5099:6;5107;5156:2;5144:9;5135:7;5131:23;5127:32;5124:119;;;5162:79;;:::i;:::-;5124:119;5282:1;5307:53;5352:7;5343:6;5332:9;5328:22;5307:53;:::i;:::-;5297:63;;5253:117;5409:2;5435:53;5480:7;5471:6;5460:9;5456:22;5435:53;:::i;:::-;5425:63;;5380:118;5031:474;;;;;:::o;5511:1509::-;5665:6;5673;5681;5689;5697;5746:3;5734:9;5725:7;5721:23;5717:33;5714:120;;;5753:79;;:::i;:::-;5714:120;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;6000:2;6026:53;6071:7;6062:6;6051:9;6047:22;6026:53;:::i;:::-;6016:63;;5971:118;6156:2;6145:9;6141:18;6128:32;6187:18;6179:6;6176:30;6173:117;;;6209:79;;:::i;:::-;6173:117;6314:78;6384:7;6375:6;6364:9;6360:22;6314:78;:::i;:::-;6304:88;;6099:303;6469:2;6458:9;6454:18;6441:32;6500:18;6492:6;6489:30;6486:117;;;6522:79;;:::i;:::-;6486:117;6627:78;6697:7;6688:6;6677:9;6673:22;6627:78;:::i;:::-;6617:88;;6412:303;6782:3;6771:9;6767:19;6754:33;6814:18;6806:6;6803:30;6800:117;;;6836:79;;:::i;:::-;6800:117;6941:62;6995:7;6986:6;6975:9;6971:22;6941:62;:::i;:::-;6931:72;;6725:288;5511:1509;;;;;;;;:::o;7026:1089::-;7130:6;7138;7146;7154;7162;7211:3;7199:9;7190:7;7186:23;7182:33;7179:120;;;7218:79;;:::i;:::-;7179:120;7338:1;7363:53;7408:7;7399:6;7388:9;7384:22;7363:53;:::i;:::-;7353:63;;7309:117;7465:2;7491:53;7536:7;7527:6;7516:9;7512:22;7491:53;:::i;:::-;7481:63;;7436:118;7593:2;7619:53;7664:7;7655:6;7644:9;7640:22;7619:53;:::i;:::-;7609:63;;7564:118;7721:2;7747:53;7792:7;7783:6;7772:9;7768:22;7747:53;:::i;:::-;7737:63;;7692:118;7877:3;7866:9;7862:19;7849:33;7909:18;7901:6;7898:30;7895:117;;;7931:79;;:::i;:::-;7895:117;8036:62;8090:7;8081:6;8070:9;8066:22;8036:62;:::i;:::-;8026:72;;7820:288;7026:1089;;;;;;;;:::o;8121:468::-;8186:6;8194;8243:2;8231:9;8222:7;8218:23;8214:32;8211:119;;;8249:79;;:::i;:::-;8211:119;8369:1;8394:53;8439:7;8430:6;8419:9;8415:22;8394:53;:::i;:::-;8384:63;;8340:117;8496:2;8522:50;8564:7;8555:6;8544:9;8540:22;8522:50;:::i;:::-;8512:60;;8467:115;8121:468;;;;;:::o;8595:474::-;8663:6;8671;8720:2;8708:9;8699:7;8695:23;8691:32;8688:119;;;8726:79;;:::i;:::-;8688:119;8846:1;8871:53;8916:7;8907:6;8896:9;8892:22;8871:53;:::i;:::-;8861:63;;8817:117;8973:2;8999:53;9044:7;9035:6;9024:9;9020:22;8999:53;:::i;:::-;8989:63;;8944:118;8595:474;;;;;:::o;9075:539::-;9159:6;9208:2;9196:9;9187:7;9183:23;9179:32;9176:119;;;9214:79;;:::i;:::-;9176:119;9362:1;9351:9;9347:17;9334:31;9392:18;9384:6;9381:30;9378:117;;;9414:79;;:::i;:::-;9378:117;9519:78;9589:7;9580:6;9569:9;9565:22;9519:78;:::i;:::-;9509:88;;9305:302;9075:539;;;;:::o;9620:894::-;9738:6;9746;9795:2;9783:9;9774:7;9770:23;9766:32;9763:119;;;9801:79;;:::i;:::-;9763:119;9949:1;9938:9;9934:17;9921:31;9979:18;9971:6;9968:30;9965:117;;;10001:79;;:::i;:::-;9965:117;10106:78;10176:7;10167:6;10156:9;10152:22;10106:78;:::i;:::-;10096:88;;9892:302;10261:2;10250:9;10246:18;10233:32;10292:18;10284:6;10281:30;10278:117;;;10314:79;;:::i;:::-;10278:117;10419:78;10489:7;10480:6;10469:9;10465:22;10419:78;:::i;:::-;10409:88;;10204:303;9620:894;;;;;:::o;10520:327::-;10578:6;10627:2;10615:9;10606:7;10602:23;10598:32;10595:119;;;10633:79;;:::i;:::-;10595:119;10753:1;10778:52;10822:7;10813:6;10802:9;10798:22;10778:52;:::i;:::-;10768:62;;10724:116;10520:327;;;;:::o;10853:349::-;10922:6;10971:2;10959:9;10950:7;10946:23;10942:32;10939:119;;;10977:79;;:::i;:::-;10939:119;11097:1;11122:63;11177:7;11168:6;11157:9;11153:22;11122:63;:::i;:::-;11112:73;;11068:127;10853:349;;;;:::o;11208:509::-;11277:6;11326:2;11314:9;11305:7;11301:23;11297:32;11294:119;;;11332:79;;:::i;:::-;11294:119;11480:1;11469:9;11465:17;11452:31;11510:18;11502:6;11499:30;11496:117;;;11532:79;;:::i;:::-;11496:117;11637:63;11692:7;11683:6;11672:9;11668:22;11637:63;:::i;:::-;11627:73;;11423:287;11208:509;;;;:::o;11723:329::-;11782:6;11831:2;11819:9;11810:7;11806:23;11802:32;11799:119;;;11837:79;;:::i;:::-;11799:119;11957:1;11982:53;12027:7;12018:6;12007:9;12003:22;11982:53;:::i;:::-;11972:63;;11928:117;11723:329;;;;:::o;12058:327::-;12116:6;12165:2;12153:9;12144:7;12140:23;12136:32;12133:119;;;12171:79;;:::i;:::-;12133:119;12291:1;12316:52;12360:7;12351:6;12340:9;12336:22;12316:52;:::i;:::-;12306:62;;12262:116;12058:327;;;;:::o;12391:179::-;12460:10;12481:46;12523:3;12515:6;12481:46;:::i;:::-;12559:4;12554:3;12550:14;12536:28;;12391:179;;;;:::o;12576:118::-;12663:24;12681:5;12663:24;:::i;:::-;12658:3;12651:37;12576:118;;:::o;12730:732::-;12849:3;12878:54;12926:5;12878:54;:::i;:::-;12948:86;13027:6;13022:3;12948:86;:::i;:::-;12941:93;;13058:56;13108:5;13058:56;:::i;:::-;13137:7;13168:1;13153:284;13178:6;13175:1;13172:13;13153:284;;;13254:6;13248:13;13281:63;13340:3;13325:13;13281:63;:::i;:::-;13274:70;;13367:60;13420:6;13367:60;:::i;:::-;13357:70;;13213:224;13200:1;13197;13193:9;13188:14;;13153:284;;;13157:14;13453:3;13446:10;;12854:608;;;12730:732;;;;:::o;13468:109::-;13549:21;13564:5;13549:21;:::i;:::-;13544:3;13537:34;13468:109;;:::o;13583:360::-;13669:3;13697:38;13729:5;13697:38;:::i;:::-;13751:70;13814:6;13809:3;13751:70;:::i;:::-;13744:77;;13830:52;13875:6;13870:3;13863:4;13856:5;13852:16;13830:52;:::i;:::-;13907:29;13929:6;13907:29;:::i;:::-;13902:3;13898:39;13891:46;;13673:270;13583:360;;;;:::o;13949:364::-;14037:3;14065:39;14098:5;14065:39;:::i;:::-;14120:71;14184:6;14179:3;14120:71;:::i;:::-;14113:78;;14200:52;14245:6;14240:3;14233:4;14226:5;14222:16;14200:52;:::i;:::-;14277:29;14299:6;14277:29;:::i;:::-;14272:3;14268:39;14261:46;;14041:272;13949:364;;;;:::o;14319:366::-;14461:3;14482:67;14546:2;14541:3;14482:67;:::i;:::-;14475:74;;14558:93;14647:3;14558:93;:::i;:::-;14676:2;14671:3;14667:12;14660:19;;14319:366;;;:::o;14691:::-;14833:3;14854:67;14918:2;14913:3;14854:67;:::i;:::-;14847:74;;14930:93;15019:3;14930:93;:::i;:::-;15048:2;15043:3;15039:12;15032:19;;14691:366;;;:::o;15063:::-;15205:3;15226:67;15290:2;15285:3;15226:67;:::i;:::-;15219:74;;15302:93;15391:3;15302:93;:::i;:::-;15420:2;15415:3;15411:12;15404:19;;15063:366;;;:::o;15435:::-;15577:3;15598:67;15662:2;15657:3;15598:67;:::i;:::-;15591:74;;15674:93;15763:3;15674:93;:::i;:::-;15792:2;15787:3;15783:12;15776:19;;15435:366;;;:::o;15807:::-;15949:3;15970:67;16034:2;16029:3;15970:67;:::i;:::-;15963:74;;16046:93;16135:3;16046:93;:::i;:::-;16164:2;16159:3;16155:12;16148:19;;15807:366;;;:::o;16179:::-;16321:3;16342:67;16406:2;16401:3;16342:67;:::i;:::-;16335:74;;16418:93;16507:3;16418:93;:::i;:::-;16536:2;16531:3;16527:12;16520:19;;16179:366;;;:::o;16551:::-;16693:3;16714:67;16778:2;16773:3;16714:67;:::i;:::-;16707:74;;16790:93;16879:3;16790:93;:::i;:::-;16908:2;16903:3;16899:12;16892:19;;16551:366;;;:::o;16923:::-;17065:3;17086:67;17150:2;17145:3;17086:67;:::i;:::-;17079:74;;17162:93;17251:3;17162:93;:::i;:::-;17280:2;17275:3;17271:12;17264:19;;16923:366;;;:::o;17295:::-;17437:3;17458:67;17522:2;17517:3;17458:67;:::i;:::-;17451:74;;17534:93;17623:3;17534:93;:::i;:::-;17652:2;17647:3;17643:12;17636:19;;17295:366;;;:::o;17667:::-;17809:3;17830:67;17894:2;17889:3;17830:67;:::i;:::-;17823:74;;17906:93;17995:3;17906:93;:::i;:::-;18024:2;18019:3;18015:12;18008:19;;17667:366;;;:::o;18039:::-;18181:3;18202:67;18266:2;18261:3;18202:67;:::i;:::-;18195:74;;18278:93;18367:3;18278:93;:::i;:::-;18396:2;18391:3;18387:12;18380:19;;18039:366;;;:::o;18411:::-;18553:3;18574:67;18638:2;18633:3;18574:67;:::i;:::-;18567:74;;18650:93;18739:3;18650:93;:::i;:::-;18768:2;18763:3;18759:12;18752:19;;18411:366;;;:::o;18783:::-;18925:3;18946:67;19010:2;19005:3;18946:67;:::i;:::-;18939:74;;19022:93;19111:3;19022:93;:::i;:::-;19140:2;19135:3;19131:12;19124:19;;18783:366;;;:::o;19155:::-;19297:3;19318:67;19382:2;19377:3;19318:67;:::i;:::-;19311:74;;19394:93;19483:3;19394:93;:::i;:::-;19512:2;19507:3;19503:12;19496:19;;19155:366;;;:::o;19527:::-;19669:3;19690:67;19754:2;19749:3;19690:67;:::i;:::-;19683:74;;19766:93;19855:3;19766:93;:::i;:::-;19884:2;19879:3;19875:12;19868:19;;19527:366;;;:::o;19899:::-;20041:3;20062:67;20126:2;20121:3;20062:67;:::i;:::-;20055:74;;20138:93;20227:3;20138:93;:::i;:::-;20256:2;20251:3;20247:12;20240:19;;19899:366;;;:::o;20271:::-;20413:3;20434:67;20498:2;20493:3;20434:67;:::i;:::-;20427:74;;20510:93;20599:3;20510:93;:::i;:::-;20628:2;20623:3;20619:12;20612:19;;20271:366;;;:::o;20643:108::-;20720:24;20738:5;20720:24;:::i;:::-;20715:3;20708:37;20643:108;;:::o;20757:118::-;20844:24;20862:5;20844:24;:::i;:::-;20839:3;20832:37;20757:118;;:::o;20881:115::-;20966:23;20983:5;20966:23;:::i;:::-;20961:3;20954:36;20881:115;;:::o;21002:222::-;21095:4;21133:2;21122:9;21118:18;21110:26;;21146:71;21214:1;21203:9;21199:17;21190:6;21146:71;:::i;:::-;21002:222;;;;:::o;21230:1053::-;21553:4;21591:3;21580:9;21576:19;21568:27;;21605:71;21673:1;21662:9;21658:17;21649:6;21605:71;:::i;:::-;21686:72;21754:2;21743:9;21739:18;21730:6;21686:72;:::i;:::-;21805:9;21799:4;21795:20;21790:2;21779:9;21775:18;21768:48;21833:108;21936:4;21927:6;21833:108;:::i;:::-;21825:116;;21988:9;21982:4;21978:20;21973:2;21962:9;21958:18;21951:48;22016:108;22119:4;22110:6;22016:108;:::i;:::-;22008:116;;22172:9;22166:4;22162:20;22156:3;22145:9;22141:19;22134:49;22200:76;22271:4;22262:6;22200:76;:::i;:::-;22192:84;;21230:1053;;;;;;;;:::o;22289:751::-;22512:4;22550:3;22539:9;22535:19;22527:27;;22564:71;22632:1;22621:9;22617:17;22608:6;22564:71;:::i;:::-;22645:72;22713:2;22702:9;22698:18;22689:6;22645:72;:::i;:::-;22727;22795:2;22784:9;22780:18;22771:6;22727:72;:::i;:::-;22809;22877:2;22866:9;22862:18;22853:6;22809:72;:::i;:::-;22929:9;22923:4;22919:20;22913:3;22902:9;22898:19;22891:49;22957:76;23028:4;23019:6;22957:76;:::i;:::-;22949:84;;22289:751;;;;;;;;:::o;23046:373::-;23189:4;23227:2;23216:9;23212:18;23204:26;;23276:9;23270:4;23266:20;23262:1;23251:9;23247:17;23240:47;23304:108;23407:4;23398:6;23304:108;:::i;:::-;23296:116;;23046:373;;;;:::o;23425:634::-;23646:4;23684:2;23673:9;23669:18;23661:26;;23733:9;23727:4;23723:20;23719:1;23708:9;23704:17;23697:47;23761:108;23864:4;23855:6;23761:108;:::i;:::-;23753:116;;23916:9;23910:4;23906:20;23901:2;23890:9;23886:18;23879:48;23944:108;24047:4;24038:6;23944:108;:::i;:::-;23936:116;;23425:634;;;;;:::o;24065:210::-;24152:4;24190:2;24179:9;24175:18;24167:26;;24203:65;24265:1;24254:9;24250:17;24241:6;24203:65;:::i;:::-;24065:210;;;;:::o;24281:313::-;24394:4;24432:2;24421:9;24417:18;24409:26;;24481:9;24475:4;24471:20;24467:1;24456:9;24452:17;24445:47;24509:78;24582:4;24573:6;24509:78;:::i;:::-;24501:86;;24281:313;;;;:::o;24600:419::-;24766:4;24804:2;24793:9;24789:18;24781:26;;24853:9;24847:4;24843:20;24839:1;24828:9;24824:17;24817:47;24881:131;25007:4;24881:131;:::i;:::-;24873:139;;24600:419;;;:::o;25025:::-;25191:4;25229:2;25218:9;25214:18;25206:26;;25278:9;25272:4;25268:20;25264:1;25253:9;25249:17;25242:47;25306:131;25432:4;25306:131;:::i;:::-;25298:139;;25025:419;;;:::o;25450:::-;25616:4;25654:2;25643:9;25639:18;25631:26;;25703:9;25697:4;25693:20;25689:1;25678:9;25674:17;25667:47;25731:131;25857:4;25731:131;:::i;:::-;25723:139;;25450:419;;;:::o;25875:::-;26041:4;26079:2;26068:9;26064:18;26056:26;;26128:9;26122:4;26118:20;26114:1;26103:9;26099:17;26092:47;26156:131;26282:4;26156:131;:::i;:::-;26148:139;;25875:419;;;:::o;26300:::-;26466:4;26504:2;26493:9;26489:18;26481:26;;26553:9;26547:4;26543:20;26539:1;26528:9;26524:17;26517:47;26581:131;26707:4;26581:131;:::i;:::-;26573:139;;26300:419;;;:::o;26725:::-;26891:4;26929:2;26918:9;26914:18;26906:26;;26978:9;26972:4;26968:20;26964:1;26953:9;26949:17;26942:47;27006:131;27132:4;27006:131;:::i;:::-;26998:139;;26725:419;;;:::o;27150:::-;27316:4;27354:2;27343:9;27339:18;27331:26;;27403:9;27397:4;27393:20;27389:1;27378:9;27374:17;27367:47;27431:131;27557:4;27431:131;:::i;:::-;27423:139;;27150:419;;;:::o;27575:::-;27741:4;27779:2;27768:9;27764:18;27756:26;;27828:9;27822:4;27818:20;27814:1;27803:9;27799:17;27792:47;27856:131;27982:4;27856:131;:::i;:::-;27848:139;;27575:419;;;:::o;28000:::-;28166:4;28204:2;28193:9;28189:18;28181:26;;28253:9;28247:4;28243:20;28239:1;28228:9;28224:17;28217:47;28281:131;28407:4;28281:131;:::i;:::-;28273:139;;28000:419;;;:::o;28425:::-;28591:4;28629:2;28618:9;28614:18;28606:26;;28678:9;28672:4;28668:20;28664:1;28653:9;28649:17;28642:47;28706:131;28832:4;28706:131;:::i;:::-;28698:139;;28425:419;;;:::o;28850:::-;29016:4;29054:2;29043:9;29039:18;29031:26;;29103:9;29097:4;29093:20;29089:1;29078:9;29074:17;29067:47;29131:131;29257:4;29131:131;:::i;:::-;29123:139;;28850:419;;;:::o;29275:::-;29441:4;29479:2;29468:9;29464:18;29456:26;;29528:9;29522:4;29518:20;29514:1;29503:9;29499:17;29492:47;29556:131;29682:4;29556:131;:::i;:::-;29548:139;;29275:419;;;:::o;29700:::-;29866:4;29904:2;29893:9;29889:18;29881:26;;29953:9;29947:4;29943:20;29939:1;29928:9;29924:17;29917:47;29981:131;30107:4;29981:131;:::i;:::-;29973:139;;29700:419;;;:::o;30125:::-;30291:4;30329:2;30318:9;30314:18;30306:26;;30378:9;30372:4;30368:20;30364:1;30353:9;30349:17;30342:47;30406:131;30532:4;30406:131;:::i;:::-;30398:139;;30125:419;;;:::o;30550:::-;30716:4;30754:2;30743:9;30739:18;30731:26;;30803:9;30797:4;30793:20;30789:1;30778:9;30774:17;30767:47;30831:131;30957:4;30831:131;:::i;:::-;30823:139;;30550:419;;;:::o;30975:::-;31141:4;31179:2;31168:9;31164:18;31156:26;;31228:9;31222:4;31218:20;31214:1;31203:9;31199:17;31192:47;31256:131;31382:4;31256:131;:::i;:::-;31248:139;;30975:419;;;:::o;31400:::-;31566:4;31604:2;31593:9;31589:18;31581:26;;31653:9;31647:4;31643:20;31639:1;31628:9;31624:17;31617:47;31681:131;31807:4;31681:131;:::i;:::-;31673:139;;31400:419;;;:::o;31825:222::-;31918:4;31956:2;31945:9;31941:18;31933:26;;31969:71;32037:1;32026:9;32022:17;32013:6;31969:71;:::i;:::-;31825:222;;;;:::o;32053:332::-;32174:4;32212:2;32201:9;32197:18;32189:26;;32225:71;32293:1;32282:9;32278:17;32269:6;32225:71;:::i;:::-;32306:72;32374:2;32363:9;32359:18;32350:6;32306:72;:::i;:::-;32053:332;;;;;:::o;32391:218::-;32482:4;32520:2;32509:9;32505:18;32497:26;;32533:69;32599:1;32588:9;32584:17;32575:6;32533:69;:::i;:::-;32391:218;;;;:::o;32615:129::-;32649:6;32676:20;;:::i;:::-;32666:30;;32705:33;32733:4;32725:6;32705:33;:::i;:::-;32615:129;;;:::o;32750:75::-;32783:6;32816:2;32810:9;32800:19;;32750:75;:::o;32831:311::-;32908:4;32998:18;32990:6;32987:30;32984:56;;;33020:18;;:::i;:::-;32984:56;33070:4;33062:6;33058:17;33050:25;;33130:4;33124;33120:15;33112:23;;32831:311;;;:::o;33148:::-;33225:4;33315:18;33307:6;33304:30;33301:56;;;33337:18;;:::i;:::-;33301:56;33387:4;33379:6;33375:17;33367:25;;33447:4;33441;33437:15;33429:23;;33148:311;;;:::o;33465:307::-;33526:4;33616:18;33608:6;33605:30;33602:56;;;33638:18;;:::i;:::-;33602:56;33676:29;33698:6;33676:29;:::i;:::-;33668:37;;33760:4;33754;33750:15;33742:23;;33465:307;;;:::o;33778:308::-;33840:4;33930:18;33922:6;33919:30;33916:56;;;33952:18;;:::i;:::-;33916:56;33990:29;34012:6;33990:29;:::i;:::-;33982:37;;34074:4;34068;34064:15;34056:23;;33778:308;;;:::o;34092:132::-;34159:4;34182:3;34174:11;;34212:4;34207:3;34203:14;34195:22;;34092:132;;;:::o;34230:114::-;34297:6;34331:5;34325:12;34315:22;;34230:114;;;:::o;34350:98::-;34401:6;34435:5;34429:12;34419:22;;34350:98;;;:::o;34454:99::-;34506:6;34540:5;34534:12;34524:22;;34454:99;;;:::o;34559:113::-;34629:4;34661;34656:3;34652:14;34644:22;;34559:113;;;:::o;34678:184::-;34777:11;34811:6;34806:3;34799:19;34851:4;34846:3;34842:14;34827:29;;34678:184;;;;:::o;34868:168::-;34951:11;34985:6;34980:3;34973:19;35025:4;35020:3;35016:14;35001:29;;34868:168;;;;:::o;35042:169::-;35126:11;35160:6;35155:3;35148:19;35200:4;35195:3;35191:14;35176:29;;35042:169;;;;:::o;35217:305::-;35257:3;35276:20;35294:1;35276:20;:::i;:::-;35271:25;;35310:20;35328:1;35310:20;:::i;:::-;35305:25;;35464:1;35396:66;35392:74;35389:1;35386:81;35383:107;;;35470:18;;:::i;:::-;35383:107;35514:1;35511;35507:9;35500:16;;35217:305;;;;:::o;35528:246::-;35567:3;35586:19;35603:1;35586:19;:::i;:::-;35581:24;;35619:19;35636:1;35619:19;:::i;:::-;35614:24;;35716:1;35704:10;35700:18;35697:1;35694:25;35691:51;;;35722:18;;:::i;:::-;35691:51;35766:1;35763;35759:9;35752:16;;35528:246;;;;:::o;35780:185::-;35820:1;35837:20;35855:1;35837:20;:::i;:::-;35832:25;;35871:20;35889:1;35871:20;:::i;:::-;35866:25;;35910:1;35900:35;;35915:18;;:::i;:::-;35900:35;35957:1;35954;35950:9;35945:14;;35780:185;;;;:::o;35971:348::-;36011:7;36034:20;36052:1;36034:20;:::i;:::-;36029:25;;36068:20;36086:1;36068:20;:::i;:::-;36063:25;;36256:1;36188:66;36184:74;36181:1;36178:81;36173:1;36166:9;36159:17;36155:105;36152:131;;;36263:18;;:::i;:::-;36152:131;36311:1;36308;36304:9;36293:20;;35971:348;;;;:::o;36325:191::-;36365:4;36385:20;36403:1;36385:20;:::i;:::-;36380:25;;36419:20;36437:1;36419:20;:::i;:::-;36414:25;;36458:1;36455;36452:8;36449:34;;;36463:18;;:::i;:::-;36449:34;36508:1;36505;36501:9;36493:17;;36325:191;;;;:::o;36522:188::-;36561:4;36581:19;36598:1;36581:19;:::i;:::-;36576:24;;36614:19;36631:1;36614:19;:::i;:::-;36609:24;;36652:1;36649;36646:8;36643:34;;;36657:18;;:::i;:::-;36643:34;36702:1;36699;36695:9;36687:17;;36522:188;;;;:::o;36716:96::-;36753:7;36782:24;36800:5;36782:24;:::i;:::-;36771:35;;36716:96;;;:::o;36818:90::-;36852:7;36895:5;36888:13;36881:21;36870:32;;36818:90;;;:::o;36914:149::-;36950:7;36990:66;36983:5;36979:78;36968:89;;36914:149;;;:::o;37069:126::-;37106:7;37146:42;37139:5;37135:54;37124:65;;37069:126;;;:::o;37201:77::-;37238:7;37267:5;37256:16;;37201:77;;;:::o;37284:93::-;37320:7;37360:10;37353:5;37349:22;37338:33;;37284:93;;;:::o;37383:154::-;37467:6;37462:3;37457;37444:30;37529:1;37520:6;37515:3;37511:16;37504:27;37383:154;;;:::o;37543:307::-;37611:1;37621:113;37635:6;37632:1;37629:13;37621:113;;;37720:1;37715:3;37711:11;37705:18;37701:1;37696:3;37692:11;37685:39;37657:2;37654:1;37650:10;37645:15;;37621:113;;;37752:6;37749:1;37746:13;37743:101;;;37832:1;37823:6;37818:3;37814:16;37807:27;37743:101;37592:258;37543:307;;;:::o;37856:320::-;37900:6;37937:1;37931:4;37927:12;37917:22;;37984:1;37978:4;37974:12;38005:18;37995:81;;38061:4;38053:6;38049:17;38039:27;;37995:81;38123:2;38115:6;38112:14;38092:18;38089:38;38086:84;;;38142:18;;:::i;:::-;38086:84;37907:269;37856:320;;;:::o;38182:281::-;38265:27;38287:4;38265:27;:::i;:::-;38257:6;38253:40;38395:6;38383:10;38380:22;38359:18;38347:10;38344:34;38341:62;38338:88;;;38406:18;;:::i;:::-;38338:88;38446:10;38442:2;38435:22;38225:238;38182:281;;:::o;38469:233::-;38508:3;38531:24;38549:5;38531:24;:::i;:::-;38522:33;;38577:66;38570:5;38567:77;38564:103;;;38647:18;;:::i;:::-;38564:103;38694:1;38687:5;38683:13;38676:20;;38469:233;;;:::o;38708:175::-;38746:3;38769:23;38786:5;38769:23;:::i;:::-;38760:32;;38814:10;38807:5;38804:21;38801:47;;;38828:18;;:::i;:::-;38801:47;38875:1;38868:5;38864:13;38857:20;;38708:175;;;:::o;38889:180::-;38937:77;38934:1;38927:88;39034:4;39031:1;39024:15;39058:4;39055:1;39048:15;39075:180;39123:77;39120:1;39113:88;39220:4;39217:1;39210:15;39244:4;39241:1;39234:15;39261:180;39309:77;39306:1;39299:88;39406:4;39403:1;39396:15;39430:4;39427:1;39420:15;39447:180;39495:77;39492:1;39485:88;39592:4;39589:1;39582:15;39616:4;39613:1;39606:15;39633:180;39681:77;39678:1;39671:88;39778:4;39775:1;39768:15;39802:4;39799:1;39792:15;39819:183;39854:3;39892:1;39874:16;39871:23;39868:128;;;39930:1;39927;39924;39909:23;39952:34;39983:1;39977:8;39952:34;:::i;:::-;39945:41;;39868:128;39819:183;:::o;40008:117::-;40117:1;40114;40107:12;40131:117;40240:1;40237;40230:12;40254:117;40363:1;40360;40353:12;40377:117;40486:1;40483;40476:12;40500:117;40609:1;40606;40599:12;40623:102;40664:6;40715:2;40711:7;40706:2;40699:5;40695:14;40691:28;40681:38;;40623:102;;;:::o;40731:106::-;40775:8;40824:5;40819:3;40815:15;40794:36;;40731:106;;;:::o;40843:239::-;40983:34;40979:1;40971:6;40967:14;40960:58;41052:22;41047:2;41039:6;41035:15;41028:47;40843:239;:::o;41088:227::-;41228:34;41224:1;41216:6;41212:14;41205:58;41297:10;41292:2;41284:6;41280:15;41273:35;41088:227;:::o;41321:230::-;41461:34;41457:1;41449:6;41445:14;41438:58;41530:13;41525:2;41517:6;41513:15;41506:38;41321:230;:::o;41557:225::-;41697:34;41693:1;41685:6;41681:14;41674:58;41766:8;41761:2;41753:6;41749:15;41742:33;41557:225;:::o;41788:228::-;41928:34;41924:1;41916:6;41912:14;41905:58;41997:11;41992:2;41984:6;41980:15;41973:36;41788:228;:::o;42022:179::-;42162:31;42158:1;42150:6;42146:14;42139:55;42022:179;:::o;42207:167::-;42347:19;42343:1;42335:6;42331:14;42324:43;42207:167;:::o;42380:224::-;42520:34;42516:1;42508:6;42504:14;42497:58;42589:7;42584:2;42576:6;42572:15;42565:32;42380:224;:::o;42610:237::-;42750:34;42746:1;42738:6;42734:14;42727:58;42819:20;42814:2;42806:6;42802:15;42795:45;42610:237;:::o;42853:229::-;42993:34;42989:1;42981:6;42977:14;42970:58;43062:12;43057:2;43049:6;43045:15;43038:37;42853:229;:::o;43088:228::-;43228:34;43224:1;43216:6;43212:14;43205:58;43297:11;43292:2;43284:6;43280:15;43273:36;43088:228;:::o;43322:182::-;43462:34;43458:1;43450:6;43446:14;43439:58;43322:182;:::o;43510:169::-;43650:21;43646:1;43638:6;43634:14;43627:45;43510:169;:::o;43685:228::-;43825:34;43821:1;43813:6;43809:14;43802:58;43894:11;43889:2;43881:6;43877:15;43870:36;43685:228;:::o;43919:::-;44059:34;44055:1;44047:6;44043:14;44036:58;44128:11;44123:2;44115:6;44111:15;44104:36;43919:228;:::o;44153:227::-;44293:34;44289:1;44281:6;44277:14;44270:58;44362:10;44357:2;44349:6;44345:15;44338:35;44153:227;:::o;44386:220::-;44526:34;44522:1;44514:6;44510:14;44503:58;44595:3;44590:2;44582:6;44578:15;44571:28;44386:220;:::o;44612:711::-;44651:3;44689:4;44671:16;44668:26;44665:39;;;44697:5;;44665:39;44726:20;;:::i;:::-;44801:1;44783:16;44779:24;44776:1;44770:4;44755:49;44834:4;44828:11;44933:16;44926:4;44918:6;44914:17;44911:39;44878:18;44870:6;44867:30;44851:113;44848:146;;;44979:5;;;;44848:146;45025:6;45019:4;45015:17;45061:3;45055:10;45088:18;45080:6;45077:30;45074:43;;;45110:5;;;;;;45074:43;45158:6;45151:4;45146:3;45142:14;45138:27;45217:1;45199:16;45195:24;45189:4;45185:35;45180:3;45177:44;45174:57;;;45224:5;;;;;;;45174:57;45241;45289:6;45283:4;45279:17;45271:6;45267:30;45261:4;45241:57;:::i;:::-;45314:3;45307:10;;44655:668;;;;;44612:711;;:::o;45329:122::-;45402:24;45420:5;45402:24;:::i;:::-;45395:5;45392:35;45382:63;;45441:1;45438;45431:12;45382:63;45329:122;:::o;45457:116::-;45527:21;45542:5;45527:21;:::i;:::-;45520:5;45517:32;45507:60;;45563:1;45560;45553:12;45507:60;45457:116;:::o;45579:120::-;45651:23;45668:5;45651:23;:::i;:::-;45644:5;45641:34;45631:62;;45689:1;45686;45679:12;45631:62;45579:120;:::o;45705:122::-;45778:24;45796:5;45778:24;:::i;:::-;45771:5;45768:35;45758:63;;45817:1;45814;45807:12;45758:63;45705:122;:::o;45833:120::-;45905:23;45922:5;45905:23;:::i;:::-;45898:5;45895:34;45885:62;;45943:1;45940;45933:12;45885:62;45833:120;:::o

Swarm Source

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