ETH Price: $3,470.18 (-0.01%)

Token

JungleBay Sandbox Avatars (JBSA)
 

Overview

Max Total Supply

3,391 JBSA

Holders

203

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0x3fC5C83Ae2fD646CF9Dea45e55827bD7a6D67BdD
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:
JBACAvatar

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions 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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.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 functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

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

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

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155Receiver.sol


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

pragma solidity ^0.8.0;


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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/IERC1155.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC1155/ERC1155.sol


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

pragma solidity ^0.8.0;







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

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

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

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

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

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

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

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

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

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

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

        return batchBalances;
    }

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

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

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

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

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

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

        address operator = _msgSender();

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

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

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

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

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

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

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

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

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

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

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

        return array;
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: avatars.sol



pragma solidity ^0.8.0;




contract JBACAvatar is ERC1155, Ownable {

    string public name;
    string public symbol;
    string public contractData;

    uint[] private availableTokens;
    uint256 public publicCost = 0.02 ether;
    string public mintPhase = "closed";
    uint public privateMintAmount = 100;
    uint public publicMintAmount = 5;

    IERC20 public tokenAddress;
    uint256 public tokenRate = 1000 * 10 ** 18; //pay 1k jbac

    mapping(address => uint) public addressMintedBalance;

    mapping(uint => string) public tokenURI;

    constructor() ERC1155("") {
        name = "JungleBay Sandbox Avatars";
        symbol = "JBSA";
    }

    function mintBatch(uint[] memory _ids, uint[] memory _amounts) public payable {
        //if mint is closed then give error
        require(keccak256(abi.encodePacked(mintPhase)) != keccak256(abi.encodePacked("closed")), "Mint phase is closed");

        uint mintAmount = 0;
        for(uint i = 0; i < _ids.length; i++){
            require(verifyAvailibility(_ids[i], _amounts[i]), "Token that you wanted to mint is not available");
            mintAmount = mintAmount + _amounts[i];
        }

        //if you are the owner you can mint for free
        if (msg.sender != owner()) {
            uint ownerMintedCount = addressMintedBalance[msg.sender];
            if(keccak256(abi.encodePacked(mintPhase)) == keccak256(abi.encodePacked("private"))){
                //to make sure we got jbac coins
                require(ownerMintedCount + mintAmount <= privateMintAmount, "max NFT per address exceeded");
                tokenAddress.transferFrom(msg.sender, address(this), tokenRate * mintAmount);
            }
            if(keccak256(abi.encodePacked(mintPhase)) == keccak256(abi.encodePacked("public"))){
                //to make sure we got eth
                require(ownerMintedCount + mintAmount <= publicMintAmount, "max NFT per address exceeded");
                require(msg.value >= publicCost * mintAmount, "insufficient funds");
            }
        }

        _mintBatch(msg.sender, _ids, _amounts, "");

        addressMintedBalance[msg.sender] = addressMintedBalance[msg.sender] + mintAmount;

        for(uint i = 0; i < _ids.length; i++){
            availableTokens[_ids[i]] = availableTokens[_ids[i]] - _amounts[i];
        }
    }

    function verifyAvailibility(uint _token, uint _amount) public view returns(bool) {
        if(availableTokens[_token] >= _amount && availableTokens[_token] != 0){
            return true;
        }

        return false;
    }

    function burn(uint _id, uint _amount) external {
        _burn(msg.sender, _id, _amount);
    }

    function burnBatch(uint[] memory _ids, uint[] memory _amounts) external {
        _burnBatch(msg.sender, _ids, _amounts);
    }

    function burnForMint(address _from, uint[] memory _burnIds, uint[] memory _burnAmounts, uint[] memory _mintIds, uint[] memory _mintAmounts) external onlyOwner {
        _burnBatch(_from, _burnIds, _burnAmounts);
        _mintBatch(_from, _mintIds, _mintAmounts, "");
    }

    function setURI(uint _id, string memory _uri) external onlyOwner {
        tokenURI[_id] = _uri;
        emit URI(_uri, _id);
    }

    function uri(uint _id) public override view returns (string memory) {
        return tokenURI[_id];
    }

    function setPrivateMintAmount(uint _amount) public onlyOwner {
        privateMintAmount = _amount;
    }

    function setPublicMintAmount(uint _amount) public onlyOwner {
        publicMintAmount = _amount;
    }

    function closeMinting() external onlyOwner {
        mintPhase = "closed";
    }

    function setPrivateMint() external onlyOwner {
        mintPhase = "private";
    }

    function setPublicMint() external onlyOwner {
        mintPhase = "public";
    }

    function setTokenAddress(address _address) public onlyOwner {
        tokenAddress = IERC20(_address);
    }

    function setAvailableTokens(uint[] memory _tokens) public onlyOwner {
        availableTokens = _tokens;
    }

    function setContractURI(string memory _data) public onlyOwner {
        contractData = _data;
    }

    function contractURI() public view returns (string memory) {
        return contractData;
    }

    function seeTokenAvailability(uint _id) public view onlyOwner returns(uint){
        return availableTokens[_id];
    }
    
    function withdraw() public payable onlyOwner {
        (bool os, ) = payable(owner()).call{value: address(this).balance}("");
        require(os);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256[]","name":"_burnIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_burnAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintIds","type":"uint256[]"},{"internalType":"uint256[]","name":"_mintAmounts","type":"uint256[]"}],"name":"burnForMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"closeMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractData","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPhase","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","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":"privateMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"seeTokenAvailability","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256[]","name":"_tokens","type":"uint256[]"}],"name":"setAvailableTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_data","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPrivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setPrivateMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setPublicMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_token","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"verifyAvailibility","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

608060405266470de4df8200006008556040518060400160405280600681526020017f636c6f7365640000000000000000000000000000000000000000000000000000815250600990805190602001906200005c92919062000250565b506064600a556005600b55683635c9adc5dea00000600d553480156200008157600080fd5b5060405180602001604052806000815250620000a3816200016660201b60201c565b50620000c4620000b86200018260201b60201c565b6200018a60201b60201c565b6040518060400160405280601981526020017f4a756e676c654261792053616e64626f78204176617461727300000000000000815250600490805190602001906200011192919062000250565b506040518060400160405280600481526020017f4a42534100000000000000000000000000000000000000000000000000000000815250600590805190602001906200015f92919062000250565b5062000365565b80600290805190602001906200017e92919062000250565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200025e9062000300565b90600052602060002090601f016020900481019282620002825760008555620002ce565b82601f106200029d57805160ff1916838001178555620002ce565b82800160010185558215620002ce579182015b82811115620002cd578251825591602001919060010190620002b0565b5b509050620002dd9190620002e1565b5090565b5b80821115620002fc576000816000905550600101620002e2565b5090565b600060028204905060018216806200031957607f821691505b6020821081141562000330576200032f62000336565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614f1180620003756000396000f3fe60806040526004361061022f5760003560e01c8063640adfef1161012e578063a22cb465116100ab578063d8a2b6db1161006f578063d8a2b6db146107f8578063e8a3d4851461080f578063e985e9c51461083a578063f242432a14610877578063f2fde38b146108a05761022f565b8063a22cb46514610722578063ae3c778d1461074b578063b390c0ab14610776578063c87b56dd1461079f578063d351cfdc146107dc5761022f565b806387491c60116100f257806387491c60146106615780638da5cb5b14610678578063938e3d7b146106a357806395d89b41146106cc5780639d76ea58146106f75761022f565b8063640adfef146105a4578063715018a6146105cd57806383ca4b6f146105e4578063862440e21461060d5780638693da20146106365761022f565b806326a4e8d2116101bc5780633ccfd60b116101805780633ccfd60b146104ce5780634307c4b2146104d8578063443309f5146105015780634e1273f41461053e578063510f41041461057b5761022f565b806326a4e8d2146103e95780632713b02c146104125780632eb2c2d61461044f57806331711884146104785780633cca2420146104a35761022f565b806306fdde031161020357806306fdde03146102ee5780630e89341c14610319578063173010041461035657806317881cbf1461038157806318cae269146103ac5761022f565b8062fdd58e1461023457806301ffc9a71461027157806302456aa2146102ae57806305f1837b146102c5575b600080fd5b34801561024057600080fd5b5061025b600480360381019061025691906136ef565b6108c9565b6040516102689190614325565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613895565b610992565b6040516102a5919061408d565b60405180910390f35b3480156102ba57600080fd5b506102c3610a74565b005b3480156102d157600080fd5b506102ec60048036038101906102e79190613938565b610aca565b005b3480156102fa57600080fd5b50610303610adc565b60405161031091906140c3565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190613938565b610b6a565b60405161034d91906140c3565b60405180910390f35b34801561036257600080fd5b5061036b610c0f565b6040516103789190614325565b60405180910390f35b34801561038d57600080fd5b50610396610c15565b6040516103a391906140c3565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce91906133f1565b610ca3565b6040516103e09190614325565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b91906133f1565b610cbb565b005b34801561041e57600080fd5b50610439600480360381019061043491906139c1565b610d07565b604051610446919061408d565b60405180910390f35b34801561045b57600080fd5b506104766004803603810190610471919061345e565b610d6f565b005b34801561048457600080fd5b5061048d610e10565b60405161049a9190614325565b60405180910390f35b3480156104af57600080fd5b506104b8610e16565b6040516104c591906140c3565b60405180910390f35b6104d6610ea4565b005b3480156104e457600080fd5b506104ff60048036038101906104fa91906137a7565b610f2c565b005b34801561050d57600080fd5b5061052860048036038101906105239190613938565b610f4e565b6040516105359190614325565b60405180910390f35b34801561054a57600080fd5b506105656004803603810190610560919061372f565b610f7e565b6040516105729190614034565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d91906135c4565b611097565b005b3480156105b057600080fd5b506105cb60048036038101906105c69190613938565b6110cc565b005b3480156105d957600080fd5b506105e26110de565b005b3480156105f057600080fd5b5061060b600480360381019061060691906137f0565b6110f2565b005b34801561061957600080fd5b50610634600480360381019061062f9190613965565b611101565b005b34801561064257600080fd5b5061064b61116d565b6040516106589190614325565b60405180910390f35b34801561066d57600080fd5b50610676611173565b005b34801561068457600080fd5b5061068d6111c9565b60405161069a9190613f20565b60405180910390f35b3480156106af57600080fd5b506106ca60048036038101906106c591906138ef565b6111f3565b005b3480156106d857600080fd5b506106e1611215565b6040516106ee91906140c3565b60405180910390f35b34801561070357600080fd5b5061070c6112a3565b60405161071991906140a8565b60405180910390f35b34801561072e57600080fd5b50610749600480360381019061074491906136af565b6112c9565b005b34801561075757600080fd5b506107606112df565b60405161076d9190614325565b60405180910390f35b34801561078257600080fd5b5061079d600480360381019061079891906139c1565b6112e5565b005b3480156107ab57600080fd5b506107c660048036038101906107c19190613938565b6112f4565b6040516107d391906140c3565b60405180910390f35b6107f660048036038101906107f191906137f0565b611394565b005b34801561080457600080fd5b5061080d611927565b005b34801561081b57600080fd5b5061082461197d565b60405161083191906140c3565b60405180910390f35b34801561084657600080fd5b50610861600480360381019061085c919061341e565b611a0f565b60405161086e919061408d565b60405180910390f35b34801561088357600080fd5b5061089e6004803603810190610899919061352d565b611aa3565b005b3480156108ac57600080fd5b506108c760048036038101906108c291906133f1565b611b44565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561093a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093190614165565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a5d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a6d5750610a6c82611bc8565b5b9050919050565b610a7c611c32565b6040518060400160405280600681526020017f7075626c6963000000000000000000000000000000000000000000000000000081525060099080519060200190610ac7929190613067565b50565b610ad2611c32565b80600a8190555050565b60048054610ae9906146b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610b15906146b4565b8015610b625780601f10610b3757610100808354040283529160200191610b62565b820191906000526020600020905b815481529060010190602001808311610b4557829003601f168201915b505050505081565b6060600f60008381526020019081526020016000208054610b8a906146b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb6906146b4565b8015610c035780601f10610bd857610100808354040283529160200191610c03565b820191906000526020600020905b815481529060010190602001808311610be657829003601f168201915b50505050509050919050565b600a5481565b60098054610c22906146b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4e906146b4565b8015610c9b5780601f10610c7057610100808354040283529160200191610c9b565b820191906000526020600020905b815481529060010190602001808311610c7e57829003601f168201915b505050505081565b600e6020528060005260406000206000915090505481565b610cc3611c32565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008160078481548110610d1e57610d1d6147be565b5b906000526020600020015410158015610d565750600060078481548110610d4857610d476147be565b5b906000526020600020015414155b15610d645760019050610d69565b600090505b92915050565b610d77611cb0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610dbd5750610dbc85610db7611cb0565b611a0f565b5b610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390614185565b60405180910390fd5b610e098585858585611cb8565b5050505050565b600d5481565b60068054610e23906146b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4f906146b4565b8015610e9c5780601f10610e7157610100808354040283529160200191610e9c565b820191906000526020600020905b815481529060010190602001808311610e7f57829003601f168201915b505050505081565b610eac611c32565b6000610eb66111c9565b73ffffffffffffffffffffffffffffffffffffffff1647604051610ed990613f0b565b60006040518083038185875af1925050503d8060008114610f16576040519150601f19603f3d011682016040523d82523d6000602084013e610f1b565b606091505b5050905080610f2957600080fd5b50565b610f34611c32565b8060079080519060200190610f4a9291906130ed565b5050565b6000610f58611c32565b60078281548110610f6c57610f6b6147be565b5b90600052602060002001549050919050565b60608151835114610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb90614285565b60405180910390fd5b6000835167ffffffffffffffff811115610fe157610fe06147ed565b5b60405190808252806020026020018201604052801561100f5781602001602082028036833780820191505090505b50905060005b845181101561108c5761105c858281518110611034576110336147be565b5b602002602001015185838151811061104f5761104e6147be565b5b60200260200101516108c9565b82828151811061106f5761106e6147be565b5b6020026020010181815250508061108590614717565b9050611015565b508091505092915050565b61109f611c32565b6110aa858585611fda565b6110c5858383604051806020016040528060008152506122a9565b5050505050565b6110d4611c32565b80600b8190555050565b6110e6611c32565b6110f060006124d6565b565b6110fd338383611fda565b5050565b611109611c32565b80600f60008481526020019081526020016000209080519060200190611130929190613067565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8260405161116191906140c3565b60405180910390a25050565b60085481565b61117b611c32565b6040518060400160405280600681526020017f636c6f7365640000000000000000000000000000000000000000000000000000815250600990805190602001906111c6929190613067565b50565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111fb611c32565b8060069080519060200190611211929190613067565b5050565b60058054611222906146b4565b80601f016020809104026020016040519081016040528092919081815260200182805461124e906146b4565b801561129b5780601f106112705761010080835404028352916020019161129b565b820191906000526020600020905b81548152906001019060200180831161127e57829003601f168201915b505050505081565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112db6112d4611cb0565b838361259c565b5050565b600b5481565b6112f0338383612709565b5050565b600f6020528060005260406000206000915090508054611313906146b4565b80601f016020809104026020016040519081016040528092919081815260200182805461133f906146b4565b801561138c5780601f106113615761010080835404028352916020019161138c565b820191906000526020600020905b81548152906001019060200180831161136f57829003601f168201915b505050505081565b6040516020016113a390613ee1565b6040516020818303038152906040528051906020012060096040516020016113cb9190613eb5565b604051602081830303815290604052805190602001201415611422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141990614245565b60405180910390fd5b6000805b83518110156114e75761146d848281518110611445576114446147be565b5b60200260200101518483815181106114605761145f6147be565b5b6020026020010151610d07565b6114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a390614305565b60405180910390fd5b8281815181106114bf576114be6147be565b5b6020026020010151826114d291906144e4565b915080806114df90614717565b915050611426565b506114f06111c9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117bf576000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060405160200161157590613ef6565b60405160208183030381529060405280519060200120600960405160200161159d9190613eb5565b6040516020818303038152906040528051906020012014156116c957600a5482826115c891906144e4565b1115611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090614145565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd333085600d54611657919061453a565b6040518463ffffffff1660e01b815260040161167593929190613fa3565b602060405180830381600087803b15801561168f57600080fd5b505af11580156116a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c79190613868565b505b6040516020016116d890613ecc565b6040516020818303038152906040528051906020012060096040516020016117009190613eb5565b6040516020818303038152906040528051906020012014156117bd57600b54828261172b91906144e4565b111561176c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176390614145565b60405180910390fd5b8160085461177a919061453a565b3410156117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b390614225565b60405180910390fd5b5b505b6117da338484604051806020016040528060008152506122a9565b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461182591906144e4565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b835181101561192157828181518110611887576118866147be565b5b602002602001015160078583815181106118a4576118a36147be565b5b6020026020010151815481106118bd576118bc6147be565b5b90600052602060002001546118d29190614594565b60078583815181106118e7576118e66147be565b5b602002602001015181548110611900576118ff6147be565b5b9060005260206000200181905550808061191990614717565b91505061186b565b50505050565b61192f611c32565b6040518060400160405280600781526020017f70726976617465000000000000000000000000000000000000000000000000008152506009908051906020019061197a929190613067565b50565b60606006805461198c906146b4565b80601f01602080910402602001604051908101604052809291908181526020018280546119b8906146b4565b8015611a055780601f106119da57610100808354040283529160200191611a05565b820191906000526020600020905b8154815290600101906020018083116119e857829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611aab611cb0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611af15750611af085611aeb611cb0565b611a0f565b5b611b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2790614185565b60405180910390fd5b611b3d8585858585612950565b5050505050565b611b4c611c32565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390614105565b60405180910390fd5b611bc5816124d6565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611c3a611cb0565b73ffffffffffffffffffffffffffffffffffffffff16611c586111c9565b73ffffffffffffffffffffffffffffffffffffffff1614611cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca590614205565b60405180910390fd5b565b600033905090565b8151835114611cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf3906142a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d63906141a5565b60405180910390fd5b6000611d76611cb0565b9050611d86818787878787612bec565b60005b8451811015611f37576000858281518110611da757611da66147be565b5b602002602001015190506000858381518110611dc657611dc56147be565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5e906141e5565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f1c91906144e4565b9250508190555050505080611f3090614717565b9050611d89565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611fae929190614056565b60405180910390a4611fc4818787878787612bf4565b611fd2818787878787612bfc565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561204a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612041906141c5565b60405180910390fd5b805182511461208e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612085906142a5565b60405180910390fd5b6000612098611cb0565b90506120b881856000868660405180602001604052806000815250612bec565b60005b83518110156122055760008482815181106120d9576120d86147be565b5b6020026020010151905060008483815181106120f8576120f76147be565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219090614125565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806121fd90614717565b9150506120bb565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161227d929190614056565b60405180910390a46122a381856000868660405180602001604052806000815250612bf4565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612319576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612310906142c5565b60405180910390fd5b815183511461235d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612354906142a5565b60405180910390fd5b6000612367611cb0565b905061237881600087878787612bec565b60005b845181101561243157838181518110612397576123966147be565b5b60200260200101516000808784815181106123b5576123b46147be565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461241791906144e4565b92505081905550808061242990614717565b91505061237b565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516124a9929190614056565b60405180910390a46124c081600087878787612bf4565b6124cf81600087878787612bfc565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561260b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260290614265565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126fc919061408d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612770906141c5565b60405180910390fd5b6000612783611cb0565b9050600061279084612de3565b9050600061279d84612de3565b90506127bd83876000858560405180602001604052806000815250612bec565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015612854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284b90614125565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612921929190614340565b60405180910390a461294784886000868660405180602001604052806000815250612bf4565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b7906141a5565b60405180910390fd5b60006129ca611cb0565b905060006129d785612de3565b905060006129e485612de3565b90506129f4838989858589612bec565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a82906141e5565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b4091906144e4565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612bbd929190614340565b60405180910390a4612bd3848a8a86868a612bf4565b612be1848a8a8a8a8a612e5d565b505050505050505050565b505050505050565b505050505050565b612c1b8473ffffffffffffffffffffffffffffffffffffffff16613044565b15612ddb578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612c61959493929190613f3b565b602060405180830381600087803b158015612c7b57600080fd5b505af1925050508015612cac57506040513d601f19601f82011682018060405250810190612ca991906138c2565b60015b612d5257612cb861481c565b806308c379a01415612d155750612ccd614de9565b80612cd85750612d17565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0c91906140c3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d49906142e5565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd0906140e5565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612e0257612e016147ed565b5b604051908082528060200260200182016040528015612e305781602001602082028036833780820191505090505b5090508281600081518110612e4857612e476147be565b5b60200260200101818152505080915050919050565b612e7c8473ffffffffffffffffffffffffffffffffffffffff16613044565b1561303c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612ec2959493929190613fda565b602060405180830381600087803b158015612edc57600080fd5b505af1925050508015612f0d57506040513d601f19601f82011682018060405250810190612f0a91906138c2565b60015b612fb357612f1961481c565b806308c379a01415612f765750612f2e614de9565b80612f395750612f78565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6d91906140c3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faa906142e5565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461303a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613031906140e5565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613073906146b4565b90600052602060002090601f01602090048101928261309557600085556130dc565b82601f106130ae57805160ff19168380011785556130dc565b828001600101855582156130dc579182015b828111156130db5782518255916020019190600101906130c0565b5b5090506130e9919061313a565b5090565b828054828255906000526020600020908101928215613129579160200282015b8281111561312857825182559160200191906001019061310d565b5b509050613136919061313a565b5090565b5b8082111561315357600081600090555060010161313b565b5090565b600061316a6131658461438e565b614369565b9050808382526020820190508285602086028201111561318d5761318c614843565b5b60005b858110156131bd57816131a388826132bb565b845260208401935060208301925050600181019050613190565b5050509392505050565b60006131da6131d5846143ba565b614369565b905080838252602082019050828560208602820111156131fd576131fc614843565b5b60005b8581101561322d578161321388826133dc565b845260208401935060208301925050600181019050613200565b5050509392505050565b600061324a613245846143e6565b614369565b90508281526020810184848401111561326657613265614848565b5b613271848285614672565b509392505050565b600061328c61328784614417565b614369565b9050828152602081018484840111156132a8576132a7614848565b5b6132b3848285614672565b509392505050565b6000813590506132ca81614e7f565b92915050565b600082601f8301126132e5576132e461483e565b5b81356132f5848260208601613157565b91505092915050565b600082601f8301126133135761331261483e565b5b81356133238482602086016131c7565b91505092915050565b60008135905061333b81614e96565b92915050565b60008151905061335081614e96565b92915050565b60008135905061336581614ead565b92915050565b60008151905061337a81614ead565b92915050565b600082601f8301126133955761339461483e565b5b81356133a5848260208601613237565b91505092915050565b600082601f8301126133c3576133c261483e565b5b81356133d3848260208601613279565b91505092915050565b6000813590506133eb81614ec4565b92915050565b60006020828403121561340757613406614852565b5b6000613415848285016132bb565b91505092915050565b6000806040838503121561343557613434614852565b5b6000613443858286016132bb565b9250506020613454858286016132bb565b9150509250929050565b600080600080600060a0868803121561347a57613479614852565b5b6000613488888289016132bb565b9550506020613499888289016132bb565b945050604086013567ffffffffffffffff8111156134ba576134b961484d565b5b6134c6888289016132fe565b935050606086013567ffffffffffffffff8111156134e7576134e661484d565b5b6134f3888289016132fe565b925050608086013567ffffffffffffffff8111156135145761351361484d565b5b61352088828901613380565b9150509295509295909350565b600080600080600060a0868803121561354957613548614852565b5b6000613557888289016132bb565b9550506020613568888289016132bb565b9450506040613579888289016133dc565b935050606061358a888289016133dc565b925050608086013567ffffffffffffffff8111156135ab576135aa61484d565b5b6135b788828901613380565b9150509295509295909350565b600080600080600060a086880312156135e0576135df614852565b5b60006135ee888289016132bb565b955050602086013567ffffffffffffffff81111561360f5761360e61484d565b5b61361b888289016132fe565b945050604086013567ffffffffffffffff81111561363c5761363b61484d565b5b613648888289016132fe565b935050606086013567ffffffffffffffff8111156136695761366861484d565b5b613675888289016132fe565b925050608086013567ffffffffffffffff8111156136965761369561484d565b5b6136a2888289016132fe565b9150509295509295909350565b600080604083850312156136c6576136c5614852565b5b60006136d4858286016132bb565b92505060206136e58582860161332c565b9150509250929050565b6000806040838503121561370657613705614852565b5b6000613714858286016132bb565b9250506020613725858286016133dc565b9150509250929050565b6000806040838503121561374657613745614852565b5b600083013567ffffffffffffffff8111156137645761376361484d565b5b613770858286016132d0565b925050602083013567ffffffffffffffff8111156137915761379061484d565b5b61379d858286016132fe565b9150509250929050565b6000602082840312156137bd576137bc614852565b5b600082013567ffffffffffffffff8111156137db576137da61484d565b5b6137e7848285016132fe565b91505092915050565b6000806040838503121561380757613806614852565b5b600083013567ffffffffffffffff8111156138255761382461484d565b5b613831858286016132fe565b925050602083013567ffffffffffffffff8111156138525761385161484d565b5b61385e858286016132fe565b9150509250929050565b60006020828403121561387e5761387d614852565b5b600061388c84828501613341565b91505092915050565b6000602082840312156138ab576138aa614852565b5b60006138b984828501613356565b91505092915050565b6000602082840312156138d8576138d7614852565b5b60006138e68482850161336b565b91505092915050565b60006020828403121561390557613904614852565b5b600082013567ffffffffffffffff8111156139235761392261484d565b5b61392f848285016133ae565b91505092915050565b60006020828403121561394e5761394d614852565b5b600061395c848285016133dc565b91505092915050565b6000806040838503121561397c5761397b614852565b5b600061398a858286016133dc565b925050602083013567ffffffffffffffff8111156139ab576139aa61484d565b5b6139b7858286016133ae565b9150509250929050565b600080604083850312156139d8576139d7614852565b5b60006139e6858286016133dc565b92505060206139f7858286016133dc565b9150509250929050565b6000613a0d8383613e97565b60208301905092915050565b613a22816145c8565b82525050565b6000613a338261446d565b613a3d818561449b565b9350613a4883614448565b8060005b83811015613a79578151613a608882613a01565b9750613a6b8361448e565b925050600181019050613a4c565b5085935050505092915050565b613a8f816145da565b82525050565b6000613aa082614478565b613aaa81856144ac565b9350613aba818560208601614681565b613ac381614857565b840191505092915050565b613ad78161463c565b82525050565b6000613ae882614483565b613af281856144c8565b9350613b02818560208601614681565b613b0b81614857565b840191505092915050565b60008154613b23816146b4565b613b2d81866144d9565b94506001821660008114613b485760018114613b5957613b8c565b60ff19831686528186019350613b8c565b613b6285614458565b60005b83811015613b8457815481890152600182019150602081019050613b65565b838801955050505b50505092915050565b6000613ba26028836144c8565b9150613bad82614875565b604082019050919050565b6000613bc56026836144c8565b9150613bd0826148c4565b604082019050919050565b6000613be86024836144c8565b9150613bf382614913565b604082019050919050565b6000613c0b6006836144d9565b9150613c1682614962565b600682019050919050565b6000613c2e601c836144c8565b9150613c398261498b565b602082019050919050565b6000613c51602a836144c8565b9150613c5c826149b4565b604082019050919050565b6000613c74602e836144c8565b9150613c7f82614a03565b604082019050919050565b6000613c976006836144d9565b9150613ca282614a52565b600682019050919050565b6000613cba6025836144c8565b9150613cc582614a7b565b604082019050919050565b6000613cdd6023836144c8565b9150613ce882614aca565b604082019050919050565b6000613d00602a836144c8565b9150613d0b82614b19565b604082019050919050565b6000613d236020836144c8565b9150613d2e82614b68565b602082019050919050565b6000613d466007836144d9565b9150613d5182614b91565b600782019050919050565b6000613d696000836144bd565b9150613d7482614bba565b600082019050919050565b6000613d8c6012836144c8565b9150613d9782614bbd565b602082019050919050565b6000613daf6014836144c8565b9150613dba82614be6565b602082019050919050565b6000613dd26029836144c8565b9150613ddd82614c0f565b604082019050919050565b6000613df56029836144c8565b9150613e0082614c5e565b604082019050919050565b6000613e186028836144c8565b9150613e2382614cad565b604082019050919050565b6000613e3b6021836144c8565b9150613e4682614cfc565b604082019050919050565b6000613e5e6034836144c8565b9150613e6982614d4b565b604082019050919050565b6000613e81602e836144c8565b9150613e8c82614d9a565b604082019050919050565b613ea081614632565b82525050565b613eaf81614632565b82525050565b6000613ec18284613b16565b915081905092915050565b6000613ed782613bfe565b9150819050919050565b6000613eec82613c8a565b9150819050919050565b6000613f0182613d39565b9150819050919050565b6000613f1682613d5c565b9150819050919050565b6000602082019050613f356000830184613a19565b92915050565b600060a082019050613f506000830188613a19565b613f5d6020830187613a19565b8181036040830152613f6f8186613a28565b90508181036060830152613f838185613a28565b90508181036080830152613f978184613a95565b90509695505050505050565b6000606082019050613fb86000830186613a19565b613fc56020830185613a19565b613fd26040830184613ea6565b949350505050565b600060a082019050613fef6000830188613a19565b613ffc6020830187613a19565b6140096040830186613ea6565b6140166060830185613ea6565b81810360808301526140288184613a95565b90509695505050505050565b6000602082019050818103600083015261404e8184613a28565b905092915050565b600060408201905081810360008301526140708185613a28565b905081810360208301526140848184613a28565b90509392505050565b60006020820190506140a26000830184613a86565b92915050565b60006020820190506140bd6000830184613ace565b92915050565b600060208201905081810360008301526140dd8184613add565b905092915050565b600060208201905081810360008301526140fe81613b95565b9050919050565b6000602082019050818103600083015261411e81613bb8565b9050919050565b6000602082019050818103600083015261413e81613bdb565b9050919050565b6000602082019050818103600083015261415e81613c21565b9050919050565b6000602082019050818103600083015261417e81613c44565b9050919050565b6000602082019050818103600083015261419e81613c67565b9050919050565b600060208201905081810360008301526141be81613cad565b9050919050565b600060208201905081810360008301526141de81613cd0565b9050919050565b600060208201905081810360008301526141fe81613cf3565b9050919050565b6000602082019050818103600083015261421e81613d16565b9050919050565b6000602082019050818103600083015261423e81613d7f565b9050919050565b6000602082019050818103600083015261425e81613da2565b9050919050565b6000602082019050818103600083015261427e81613dc5565b9050919050565b6000602082019050818103600083015261429e81613de8565b9050919050565b600060208201905081810360008301526142be81613e0b565b9050919050565b600060208201905081810360008301526142de81613e2e565b9050919050565b600060208201905081810360008301526142fe81613e51565b9050919050565b6000602082019050818103600083015261431e81613e74565b9050919050565b600060208201905061433a6000830184613ea6565b92915050565b60006040820190506143556000830185613ea6565b6143626020830184613ea6565b9392505050565b6000614373614384565b905061437f82826146e6565b919050565b6000604051905090565b600067ffffffffffffffff8211156143a9576143a86147ed565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143d5576143d46147ed565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614401576144006147ed565b5b61440a82614857565b9050602081019050919050565b600067ffffffffffffffff821115614432576144316147ed565b5b61443b82614857565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006144ef82614632565b91506144fa83614632565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561452f5761452e614760565b5b828201905092915050565b600061454582614632565b915061455083614632565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561458957614588614760565b5b828202905092915050565b600061459f82614632565b91506145aa83614632565b9250828210156145bd576145bc614760565b5b828203905092915050565b60006145d382614612565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006146478261464e565b9050919050565b600061465982614660565b9050919050565b600061466b82614612565b9050919050565b82818337600083830152505050565b60005b8381101561469f578082015181840152602081019050614684565b838111156146ae576000848401525b50505050565b600060028204905060018216806146cc57607f821691505b602082108114156146e0576146df61478f565b5b50919050565b6146ef82614857565b810181811067ffffffffffffffff8211171561470e5761470d6147ed565b5b80604052505050565b600061472282614632565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561475557614754614760565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561483b5760046000803e614838600051614868565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f7075626c69630000000000000000000000000000000000000000000000000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b7f636c6f7365640000000000000000000000000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7072697661746500000000000000000000000000000000000000000000000000600082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4d696e7420706861736520697320636c6f736564000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f546f6b656e207468617420796f752077616e74656420746f206d696e7420697360008201527f206e6f7420617661696c61626c65000000000000000000000000000000000000602082015250565b600060443d1015614df957614e7c565b614e01614384565b60043d036004823e80513d602482011167ffffffffffffffff82111715614e29575050614e7c565b808201805167ffffffffffffffff811115614e475750505050614e7c565b80602083010160043d038501811115614e64575050505050614e7c565b614e73826020018501866146e6565b82955050505050505b90565b614e88816145c8565b8114614e9357600080fd5b50565b614e9f816145da565b8114614eaa57600080fd5b50565b614eb6816145e6565b8114614ec157600080fd5b50565b614ecd81614632565b8114614ed857600080fd5b5056fea26469706673582212202b611a97b1f0860a218c244b67285ec21bfd3ca1a809c8e78ad41c0a2811969e64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061022f5760003560e01c8063640adfef1161012e578063a22cb465116100ab578063d8a2b6db1161006f578063d8a2b6db146107f8578063e8a3d4851461080f578063e985e9c51461083a578063f242432a14610877578063f2fde38b146108a05761022f565b8063a22cb46514610722578063ae3c778d1461074b578063b390c0ab14610776578063c87b56dd1461079f578063d351cfdc146107dc5761022f565b806387491c60116100f257806387491c60146106615780638da5cb5b14610678578063938e3d7b146106a357806395d89b41146106cc5780639d76ea58146106f75761022f565b8063640adfef146105a4578063715018a6146105cd57806383ca4b6f146105e4578063862440e21461060d5780638693da20146106365761022f565b806326a4e8d2116101bc5780633ccfd60b116101805780633ccfd60b146104ce5780634307c4b2146104d8578063443309f5146105015780634e1273f41461053e578063510f41041461057b5761022f565b806326a4e8d2146103e95780632713b02c146104125780632eb2c2d61461044f57806331711884146104785780633cca2420146104a35761022f565b806306fdde031161020357806306fdde03146102ee5780630e89341c14610319578063173010041461035657806317881cbf1461038157806318cae269146103ac5761022f565b8062fdd58e1461023457806301ffc9a71461027157806302456aa2146102ae57806305f1837b146102c5575b600080fd5b34801561024057600080fd5b5061025b600480360381019061025691906136ef565b6108c9565b6040516102689190614325565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613895565b610992565b6040516102a5919061408d565b60405180910390f35b3480156102ba57600080fd5b506102c3610a74565b005b3480156102d157600080fd5b506102ec60048036038101906102e79190613938565b610aca565b005b3480156102fa57600080fd5b50610303610adc565b60405161031091906140c3565b60405180910390f35b34801561032557600080fd5b50610340600480360381019061033b9190613938565b610b6a565b60405161034d91906140c3565b60405180910390f35b34801561036257600080fd5b5061036b610c0f565b6040516103789190614325565b60405180910390f35b34801561038d57600080fd5b50610396610c15565b6040516103a391906140c3565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce91906133f1565b610ca3565b6040516103e09190614325565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b91906133f1565b610cbb565b005b34801561041e57600080fd5b50610439600480360381019061043491906139c1565b610d07565b604051610446919061408d565b60405180910390f35b34801561045b57600080fd5b506104766004803603810190610471919061345e565b610d6f565b005b34801561048457600080fd5b5061048d610e10565b60405161049a9190614325565b60405180910390f35b3480156104af57600080fd5b506104b8610e16565b6040516104c591906140c3565b60405180910390f35b6104d6610ea4565b005b3480156104e457600080fd5b506104ff60048036038101906104fa91906137a7565b610f2c565b005b34801561050d57600080fd5b5061052860048036038101906105239190613938565b610f4e565b6040516105359190614325565b60405180910390f35b34801561054a57600080fd5b506105656004803603810190610560919061372f565b610f7e565b6040516105729190614034565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d91906135c4565b611097565b005b3480156105b057600080fd5b506105cb60048036038101906105c69190613938565b6110cc565b005b3480156105d957600080fd5b506105e26110de565b005b3480156105f057600080fd5b5061060b600480360381019061060691906137f0565b6110f2565b005b34801561061957600080fd5b50610634600480360381019061062f9190613965565b611101565b005b34801561064257600080fd5b5061064b61116d565b6040516106589190614325565b60405180910390f35b34801561066d57600080fd5b50610676611173565b005b34801561068457600080fd5b5061068d6111c9565b60405161069a9190613f20565b60405180910390f35b3480156106af57600080fd5b506106ca60048036038101906106c591906138ef565b6111f3565b005b3480156106d857600080fd5b506106e1611215565b6040516106ee91906140c3565b60405180910390f35b34801561070357600080fd5b5061070c6112a3565b60405161071991906140a8565b60405180910390f35b34801561072e57600080fd5b50610749600480360381019061074491906136af565b6112c9565b005b34801561075757600080fd5b506107606112df565b60405161076d9190614325565b60405180910390f35b34801561078257600080fd5b5061079d600480360381019061079891906139c1565b6112e5565b005b3480156107ab57600080fd5b506107c660048036038101906107c19190613938565b6112f4565b6040516107d391906140c3565b60405180910390f35b6107f660048036038101906107f191906137f0565b611394565b005b34801561080457600080fd5b5061080d611927565b005b34801561081b57600080fd5b5061082461197d565b60405161083191906140c3565b60405180910390f35b34801561084657600080fd5b50610861600480360381019061085c919061341e565b611a0f565b60405161086e919061408d565b60405180910390f35b34801561088357600080fd5b5061089e6004803603810190610899919061352d565b611aa3565b005b3480156108ac57600080fd5b506108c760048036038101906108c291906133f1565b611b44565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561093a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093190614165565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a5d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a6d5750610a6c82611bc8565b5b9050919050565b610a7c611c32565b6040518060400160405280600681526020017f7075626c6963000000000000000000000000000000000000000000000000000081525060099080519060200190610ac7929190613067565b50565b610ad2611c32565b80600a8190555050565b60048054610ae9906146b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610b15906146b4565b8015610b625780601f10610b3757610100808354040283529160200191610b62565b820191906000526020600020905b815481529060010190602001808311610b4557829003601f168201915b505050505081565b6060600f60008381526020019081526020016000208054610b8a906146b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb6906146b4565b8015610c035780601f10610bd857610100808354040283529160200191610c03565b820191906000526020600020905b815481529060010190602001808311610be657829003601f168201915b50505050509050919050565b600a5481565b60098054610c22906146b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4e906146b4565b8015610c9b5780601f10610c7057610100808354040283529160200191610c9b565b820191906000526020600020905b815481529060010190602001808311610c7e57829003601f168201915b505050505081565b600e6020528060005260406000206000915090505481565b610cc3611c32565b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008160078481548110610d1e57610d1d6147be565b5b906000526020600020015410158015610d565750600060078481548110610d4857610d476147be565b5b906000526020600020015414155b15610d645760019050610d69565b600090505b92915050565b610d77611cb0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610dbd5750610dbc85610db7611cb0565b611a0f565b5b610dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df390614185565b60405180910390fd5b610e098585858585611cb8565b5050505050565b600d5481565b60068054610e23906146b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4f906146b4565b8015610e9c5780601f10610e7157610100808354040283529160200191610e9c565b820191906000526020600020905b815481529060010190602001808311610e7f57829003601f168201915b505050505081565b610eac611c32565b6000610eb66111c9565b73ffffffffffffffffffffffffffffffffffffffff1647604051610ed990613f0b565b60006040518083038185875af1925050503d8060008114610f16576040519150601f19603f3d011682016040523d82523d6000602084013e610f1b565b606091505b5050905080610f2957600080fd5b50565b610f34611c32565b8060079080519060200190610f4a9291906130ed565b5050565b6000610f58611c32565b60078281548110610f6c57610f6b6147be565b5b90600052602060002001549050919050565b60608151835114610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb90614285565b60405180910390fd5b6000835167ffffffffffffffff811115610fe157610fe06147ed565b5b60405190808252806020026020018201604052801561100f5781602001602082028036833780820191505090505b50905060005b845181101561108c5761105c858281518110611034576110336147be565b5b602002602001015185838151811061104f5761104e6147be565b5b60200260200101516108c9565b82828151811061106f5761106e6147be565b5b6020026020010181815250508061108590614717565b9050611015565b508091505092915050565b61109f611c32565b6110aa858585611fda565b6110c5858383604051806020016040528060008152506122a9565b5050505050565b6110d4611c32565b80600b8190555050565b6110e6611c32565b6110f060006124d6565b565b6110fd338383611fda565b5050565b611109611c32565b80600f60008481526020019081526020016000209080519060200190611130929190613067565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b8260405161116191906140c3565b60405180910390a25050565b60085481565b61117b611c32565b6040518060400160405280600681526020017f636c6f7365640000000000000000000000000000000000000000000000000000815250600990805190602001906111c6929190613067565b50565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111fb611c32565b8060069080519060200190611211929190613067565b5050565b60058054611222906146b4565b80601f016020809104026020016040519081016040528092919081815260200182805461124e906146b4565b801561129b5780601f106112705761010080835404028352916020019161129b565b820191906000526020600020905b81548152906001019060200180831161127e57829003601f168201915b505050505081565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112db6112d4611cb0565b838361259c565b5050565b600b5481565b6112f0338383612709565b5050565b600f6020528060005260406000206000915090508054611313906146b4565b80601f016020809104026020016040519081016040528092919081815260200182805461133f906146b4565b801561138c5780601f106113615761010080835404028352916020019161138c565b820191906000526020600020905b81548152906001019060200180831161136f57829003601f168201915b505050505081565b6040516020016113a390613ee1565b6040516020818303038152906040528051906020012060096040516020016113cb9190613eb5565b604051602081830303815290604052805190602001201415611422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141990614245565b60405180910390fd5b6000805b83518110156114e75761146d848281518110611445576114446147be565b5b60200260200101518483815181106114605761145f6147be565b5b6020026020010151610d07565b6114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a390614305565b60405180910390fd5b8281815181106114bf576114be6147be565b5b6020026020010151826114d291906144e4565b915080806114df90614717565b915050611426565b506114f06111c9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117bf576000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060405160200161157590613ef6565b60405160208183030381529060405280519060200120600960405160200161159d9190613eb5565b6040516020818303038152906040528051906020012014156116c957600a5482826115c891906144e4565b1115611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090614145565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd333085600d54611657919061453a565b6040518463ffffffff1660e01b815260040161167593929190613fa3565b602060405180830381600087803b15801561168f57600080fd5b505af11580156116a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c79190613868565b505b6040516020016116d890613ecc565b6040516020818303038152906040528051906020012060096040516020016117009190613eb5565b6040516020818303038152906040528051906020012014156117bd57600b54828261172b91906144e4565b111561176c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176390614145565b60405180910390fd5b8160085461177a919061453a565b3410156117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b390614225565b60405180910390fd5b5b505b6117da338484604051806020016040528060008152506122a9565b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461182591906144e4565b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060005b835181101561192157828181518110611887576118866147be565b5b602002602001015160078583815181106118a4576118a36147be565b5b6020026020010151815481106118bd576118bc6147be565b5b90600052602060002001546118d29190614594565b60078583815181106118e7576118e66147be565b5b602002602001015181548110611900576118ff6147be565b5b9060005260206000200181905550808061191990614717565b91505061186b565b50505050565b61192f611c32565b6040518060400160405280600781526020017f70726976617465000000000000000000000000000000000000000000000000008152506009908051906020019061197a929190613067565b50565b60606006805461198c906146b4565b80601f01602080910402602001604051908101604052809291908181526020018280546119b8906146b4565b8015611a055780601f106119da57610100808354040283529160200191611a05565b820191906000526020600020905b8154815290600101906020018083116119e857829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611aab611cb0565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611af15750611af085611aeb611cb0565b611a0f565b5b611b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2790614185565b60405180910390fd5b611b3d8585858585612950565b5050505050565b611b4c611c32565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb390614105565b60405180910390fd5b611bc5816124d6565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611c3a611cb0565b73ffffffffffffffffffffffffffffffffffffffff16611c586111c9565b73ffffffffffffffffffffffffffffffffffffffff1614611cae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca590614205565b60405180910390fd5b565b600033905090565b8151835114611cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf3906142a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d63906141a5565b60405180910390fd5b6000611d76611cb0565b9050611d86818787878787612bec565b60005b8451811015611f37576000858281518110611da757611da66147be565b5b602002602001015190506000858381518110611dc657611dc56147be565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5e906141e5565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f1c91906144e4565b9250508190555050505080611f3090614717565b9050611d89565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611fae929190614056565b60405180910390a4611fc4818787878787612bf4565b611fd2818787878787612bfc565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561204a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612041906141c5565b60405180910390fd5b805182511461208e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612085906142a5565b60405180910390fd5b6000612098611cb0565b90506120b881856000868660405180602001604052806000815250612bec565b60005b83518110156122055760008482815181106120d9576120d86147be565b5b6020026020010151905060008483815181106120f8576120f76147be565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219090614125565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806121fd90614717565b9150506120bb565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161227d929190614056565b60405180910390a46122a381856000868660405180602001604052806000815250612bf4565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612319576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612310906142c5565b60405180910390fd5b815183511461235d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612354906142a5565b60405180910390fd5b6000612367611cb0565b905061237881600087878787612bec565b60005b845181101561243157838181518110612397576123966147be565b5b60200260200101516000808784815181106123b5576123b46147be565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461241791906144e4565b92505081905550808061242990614717565b91505061237b565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516124a9929190614056565b60405180910390a46124c081600087878787612bf4565b6124cf81600087878787612bfc565b5050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561260b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260290614265565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126fc919061408d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612779576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612770906141c5565b60405180910390fd5b6000612783611cb0565b9050600061279084612de3565b9050600061279d84612de3565b90506127bd83876000858560405180602001604052806000815250612bec565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015612854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284b90614125565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612921929190614340565b60405180910390a461294784886000868660405180602001604052806000815250612bf4565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156129c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b7906141a5565b60405180910390fd5b60006129ca611cb0565b905060006129d785612de3565b905060006129e485612de3565b90506129f4838989858589612bec565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a82906141e5565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b4091906144e4565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612bbd929190614340565b60405180910390a4612bd3848a8a86868a612bf4565b612be1848a8a8a8a8a612e5d565b505050505050505050565b505050505050565b505050505050565b612c1b8473ffffffffffffffffffffffffffffffffffffffff16613044565b15612ddb578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612c61959493929190613f3b565b602060405180830381600087803b158015612c7b57600080fd5b505af1925050508015612cac57506040513d601f19601f82011682018060405250810190612ca991906138c2565b60015b612d5257612cb861481c565b806308c379a01415612d155750612ccd614de9565b80612cd85750612d17565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0c91906140c3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d49906142e5565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd0906140e5565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612e0257612e016147ed565b5b604051908082528060200260200182016040528015612e305781602001602082028036833780820191505090505b5090508281600081518110612e4857612e476147be565b5b60200260200101818152505080915050919050565b612e7c8473ffffffffffffffffffffffffffffffffffffffff16613044565b1561303c578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612ec2959493929190613fda565b602060405180830381600087803b158015612edc57600080fd5b505af1925050508015612f0d57506040513d601f19601f82011682018060405250810190612f0a91906138c2565b60015b612fb357612f1961481c565b806308c379a01415612f765750612f2e614de9565b80612f395750612f78565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6d91906140c3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faa906142e5565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461303a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613031906140e5565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613073906146b4565b90600052602060002090601f01602090048101928261309557600085556130dc565b82601f106130ae57805160ff19168380011785556130dc565b828001600101855582156130dc579182015b828111156130db5782518255916020019190600101906130c0565b5b5090506130e9919061313a565b5090565b828054828255906000526020600020908101928215613129579160200282015b8281111561312857825182559160200191906001019061310d565b5b509050613136919061313a565b5090565b5b8082111561315357600081600090555060010161313b565b5090565b600061316a6131658461438e565b614369565b9050808382526020820190508285602086028201111561318d5761318c614843565b5b60005b858110156131bd57816131a388826132bb565b845260208401935060208301925050600181019050613190565b5050509392505050565b60006131da6131d5846143ba565b614369565b905080838252602082019050828560208602820111156131fd576131fc614843565b5b60005b8581101561322d578161321388826133dc565b845260208401935060208301925050600181019050613200565b5050509392505050565b600061324a613245846143e6565b614369565b90508281526020810184848401111561326657613265614848565b5b613271848285614672565b509392505050565b600061328c61328784614417565b614369565b9050828152602081018484840111156132a8576132a7614848565b5b6132b3848285614672565b509392505050565b6000813590506132ca81614e7f565b92915050565b600082601f8301126132e5576132e461483e565b5b81356132f5848260208601613157565b91505092915050565b600082601f8301126133135761331261483e565b5b81356133238482602086016131c7565b91505092915050565b60008135905061333b81614e96565b92915050565b60008151905061335081614e96565b92915050565b60008135905061336581614ead565b92915050565b60008151905061337a81614ead565b92915050565b600082601f8301126133955761339461483e565b5b81356133a5848260208601613237565b91505092915050565b600082601f8301126133c3576133c261483e565b5b81356133d3848260208601613279565b91505092915050565b6000813590506133eb81614ec4565b92915050565b60006020828403121561340757613406614852565b5b6000613415848285016132bb565b91505092915050565b6000806040838503121561343557613434614852565b5b6000613443858286016132bb565b9250506020613454858286016132bb565b9150509250929050565b600080600080600060a0868803121561347a57613479614852565b5b6000613488888289016132bb565b9550506020613499888289016132bb565b945050604086013567ffffffffffffffff8111156134ba576134b961484d565b5b6134c6888289016132fe565b935050606086013567ffffffffffffffff8111156134e7576134e661484d565b5b6134f3888289016132fe565b925050608086013567ffffffffffffffff8111156135145761351361484d565b5b61352088828901613380565b9150509295509295909350565b600080600080600060a0868803121561354957613548614852565b5b6000613557888289016132bb565b9550506020613568888289016132bb565b9450506040613579888289016133dc565b935050606061358a888289016133dc565b925050608086013567ffffffffffffffff8111156135ab576135aa61484d565b5b6135b788828901613380565b9150509295509295909350565b600080600080600060a086880312156135e0576135df614852565b5b60006135ee888289016132bb565b955050602086013567ffffffffffffffff81111561360f5761360e61484d565b5b61361b888289016132fe565b945050604086013567ffffffffffffffff81111561363c5761363b61484d565b5b613648888289016132fe565b935050606086013567ffffffffffffffff8111156136695761366861484d565b5b613675888289016132fe565b925050608086013567ffffffffffffffff8111156136965761369561484d565b5b6136a2888289016132fe565b9150509295509295909350565b600080604083850312156136c6576136c5614852565b5b60006136d4858286016132bb565b92505060206136e58582860161332c565b9150509250929050565b6000806040838503121561370657613705614852565b5b6000613714858286016132bb565b9250506020613725858286016133dc565b9150509250929050565b6000806040838503121561374657613745614852565b5b600083013567ffffffffffffffff8111156137645761376361484d565b5b613770858286016132d0565b925050602083013567ffffffffffffffff8111156137915761379061484d565b5b61379d858286016132fe565b9150509250929050565b6000602082840312156137bd576137bc614852565b5b600082013567ffffffffffffffff8111156137db576137da61484d565b5b6137e7848285016132fe565b91505092915050565b6000806040838503121561380757613806614852565b5b600083013567ffffffffffffffff8111156138255761382461484d565b5b613831858286016132fe565b925050602083013567ffffffffffffffff8111156138525761385161484d565b5b61385e858286016132fe565b9150509250929050565b60006020828403121561387e5761387d614852565b5b600061388c84828501613341565b91505092915050565b6000602082840312156138ab576138aa614852565b5b60006138b984828501613356565b91505092915050565b6000602082840312156138d8576138d7614852565b5b60006138e68482850161336b565b91505092915050565b60006020828403121561390557613904614852565b5b600082013567ffffffffffffffff8111156139235761392261484d565b5b61392f848285016133ae565b91505092915050565b60006020828403121561394e5761394d614852565b5b600061395c848285016133dc565b91505092915050565b6000806040838503121561397c5761397b614852565b5b600061398a858286016133dc565b925050602083013567ffffffffffffffff8111156139ab576139aa61484d565b5b6139b7858286016133ae565b9150509250929050565b600080604083850312156139d8576139d7614852565b5b60006139e6858286016133dc565b92505060206139f7858286016133dc565b9150509250929050565b6000613a0d8383613e97565b60208301905092915050565b613a22816145c8565b82525050565b6000613a338261446d565b613a3d818561449b565b9350613a4883614448565b8060005b83811015613a79578151613a608882613a01565b9750613a6b8361448e565b925050600181019050613a4c565b5085935050505092915050565b613a8f816145da565b82525050565b6000613aa082614478565b613aaa81856144ac565b9350613aba818560208601614681565b613ac381614857565b840191505092915050565b613ad78161463c565b82525050565b6000613ae882614483565b613af281856144c8565b9350613b02818560208601614681565b613b0b81614857565b840191505092915050565b60008154613b23816146b4565b613b2d81866144d9565b94506001821660008114613b485760018114613b5957613b8c565b60ff19831686528186019350613b8c565b613b6285614458565b60005b83811015613b8457815481890152600182019150602081019050613b65565b838801955050505b50505092915050565b6000613ba26028836144c8565b9150613bad82614875565b604082019050919050565b6000613bc56026836144c8565b9150613bd0826148c4565b604082019050919050565b6000613be86024836144c8565b9150613bf382614913565b604082019050919050565b6000613c0b6006836144d9565b9150613c1682614962565b600682019050919050565b6000613c2e601c836144c8565b9150613c398261498b565b602082019050919050565b6000613c51602a836144c8565b9150613c5c826149b4565b604082019050919050565b6000613c74602e836144c8565b9150613c7f82614a03565b604082019050919050565b6000613c976006836144d9565b9150613ca282614a52565b600682019050919050565b6000613cba6025836144c8565b9150613cc582614a7b565b604082019050919050565b6000613cdd6023836144c8565b9150613ce882614aca565b604082019050919050565b6000613d00602a836144c8565b9150613d0b82614b19565b604082019050919050565b6000613d236020836144c8565b9150613d2e82614b68565b602082019050919050565b6000613d466007836144d9565b9150613d5182614b91565b600782019050919050565b6000613d696000836144bd565b9150613d7482614bba565b600082019050919050565b6000613d8c6012836144c8565b9150613d9782614bbd565b602082019050919050565b6000613daf6014836144c8565b9150613dba82614be6565b602082019050919050565b6000613dd26029836144c8565b9150613ddd82614c0f565b604082019050919050565b6000613df56029836144c8565b9150613e0082614c5e565b604082019050919050565b6000613e186028836144c8565b9150613e2382614cad565b604082019050919050565b6000613e3b6021836144c8565b9150613e4682614cfc565b604082019050919050565b6000613e5e6034836144c8565b9150613e6982614d4b565b604082019050919050565b6000613e81602e836144c8565b9150613e8c82614d9a565b604082019050919050565b613ea081614632565b82525050565b613eaf81614632565b82525050565b6000613ec18284613b16565b915081905092915050565b6000613ed782613bfe565b9150819050919050565b6000613eec82613c8a565b9150819050919050565b6000613f0182613d39565b9150819050919050565b6000613f1682613d5c565b9150819050919050565b6000602082019050613f356000830184613a19565b92915050565b600060a082019050613f506000830188613a19565b613f5d6020830187613a19565b8181036040830152613f6f8186613a28565b90508181036060830152613f838185613a28565b90508181036080830152613f978184613a95565b90509695505050505050565b6000606082019050613fb86000830186613a19565b613fc56020830185613a19565b613fd26040830184613ea6565b949350505050565b600060a082019050613fef6000830188613a19565b613ffc6020830187613a19565b6140096040830186613ea6565b6140166060830185613ea6565b81810360808301526140288184613a95565b90509695505050505050565b6000602082019050818103600083015261404e8184613a28565b905092915050565b600060408201905081810360008301526140708185613a28565b905081810360208301526140848184613a28565b90509392505050565b60006020820190506140a26000830184613a86565b92915050565b60006020820190506140bd6000830184613ace565b92915050565b600060208201905081810360008301526140dd8184613add565b905092915050565b600060208201905081810360008301526140fe81613b95565b9050919050565b6000602082019050818103600083015261411e81613bb8565b9050919050565b6000602082019050818103600083015261413e81613bdb565b9050919050565b6000602082019050818103600083015261415e81613c21565b9050919050565b6000602082019050818103600083015261417e81613c44565b9050919050565b6000602082019050818103600083015261419e81613c67565b9050919050565b600060208201905081810360008301526141be81613cad565b9050919050565b600060208201905081810360008301526141de81613cd0565b9050919050565b600060208201905081810360008301526141fe81613cf3565b9050919050565b6000602082019050818103600083015261421e81613d16565b9050919050565b6000602082019050818103600083015261423e81613d7f565b9050919050565b6000602082019050818103600083015261425e81613da2565b9050919050565b6000602082019050818103600083015261427e81613dc5565b9050919050565b6000602082019050818103600083015261429e81613de8565b9050919050565b600060208201905081810360008301526142be81613e0b565b9050919050565b600060208201905081810360008301526142de81613e2e565b9050919050565b600060208201905081810360008301526142fe81613e51565b9050919050565b6000602082019050818103600083015261431e81613e74565b9050919050565b600060208201905061433a6000830184613ea6565b92915050565b60006040820190506143556000830185613ea6565b6143626020830184613ea6565b9392505050565b6000614373614384565b905061437f82826146e6565b919050565b6000604051905090565b600067ffffffffffffffff8211156143a9576143a86147ed565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143d5576143d46147ed565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614401576144006147ed565b5b61440a82614857565b9050602081019050919050565b600067ffffffffffffffff821115614432576144316147ed565b5b61443b82614857565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006144ef82614632565b91506144fa83614632565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561452f5761452e614760565b5b828201905092915050565b600061454582614632565b915061455083614632565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561458957614588614760565b5b828202905092915050565b600061459f82614632565b91506145aa83614632565b9250828210156145bd576145bc614760565b5b828203905092915050565b60006145d382614612565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006146478261464e565b9050919050565b600061465982614660565b9050919050565b600061466b82614612565b9050919050565b82818337600083830152505050565b60005b8381101561469f578082015181840152602081019050614684565b838111156146ae576000848401525b50505050565b600060028204905060018216806146cc57607f821691505b602082108114156146e0576146df61478f565b5b50919050565b6146ef82614857565b810181811067ffffffffffffffff8211171561470e5761470d6147ed565b5b80604052505050565b600061472282614632565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561475557614754614760565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561483b5760046000803e614838600051614868565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f7075626c69630000000000000000000000000000000000000000000000000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b7f636c6f7365640000000000000000000000000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f7072697661746500000000000000000000000000000000000000000000000000600082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4d696e7420706861736520697320636c6f736564000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f546f6b656e207468617420796f752077616e74656420746f206d696e7420697360008201527f206e6f7420617661696c61626c65000000000000000000000000000000000000602082015250565b600060443d1015614df957614e7c565b614e01614384565b60043d036004823e80513d602482011167ffffffffffffffff82111715614e29575050614e7c565b808201805167ffffffffffffffff811115614e475750505050614e7c565b80602083010160043d038501811115614e64575050505050614e7c565b614e73826020018501866146e6565b82955050505050505b90565b614e88816145c8565b8114614e9357600080fd5b50565b614e9f816145da565b8114614eaa57600080fd5b50565b614eb6816145e6565b8114614ec157600080fd5b50565b614ecd81614632565b8114614ed857600080fd5b5056fea26469706673582212202b611a97b1f0860a218c244b67285ec21bfd3ca1a809c8e78ad41c0a2811969e64736f6c63430008070033

Deployed Bytecode Sourcemap

43440:4633:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24975:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23998:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47239:83;;;;;;;;;;;;;:::i;:::-;;46828:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43489:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46713:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43699:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43658:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43880:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47330:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45806:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26918:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43815:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43541:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47915:155;;;:::i;:::-;;47448:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47782:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25371:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46288:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46943:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2882:103;;;;;;;;;;;;;:::i;:::-;;46151:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46571:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43613:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47056:82;;;;;;;;;;;;;:::i;:::-;;2234:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47568:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43514:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43782:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25968:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43741:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46046:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43941:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44102:1696;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47146:85;;;;;;;;;;;;;:::i;:::-;;47677:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26195:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26435:406;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3140:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24975:230;25061:7;25108:1;25089:21;;:7;:21;;;;25081:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25175:9;:13;25185:2;25175:13;;;;;;;;;;;:22;25189:7;25175:22;;;;;;;;;;;;;;;;25168:29;;24975:230;;;;:::o;23998:310::-;24100:4;24152:26;24137:41;;;:11;:41;;;;:110;;;;24210:37;24195:52;;;:11;:52;;;;24137:110;:163;;;;24264:36;24288:11;24264:23;:36::i;:::-;24137:163;24117:183;;23998:310;;;:::o;47239:83::-;2120:13;:11;:13::i;:::-;47294:20:::1;;;;;;;;;;;;;;;;::::0;:9:::1;:20;;;;;;;;;;;;:::i;:::-;;47239:83::o:0;46828:107::-;2120:13;:11;:13::i;:::-;46920:7:::1;46900:17;:27;;;;46828:107:::0;:::o;43489:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46713:107::-;46766:13;46799:8;:13;46808:3;46799:13;;;;;;;;;;;46792:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46713:107;;;:::o;43699:35::-;;;;:::o;43658:34::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43880:52::-;;;;;;;;;;;;;;;;;:::o;47330:110::-;2120:13;:11;:13::i;:::-;47423:8:::1;47401:12;;:31;;;;;;;;;;;;;;;;;;47330:110:::0;:::o;45806:232::-;45881:4;45928:7;45901:15;45917:6;45901:23;;;;;;;;:::i;:::-;;;;;;;;;;:34;;:66;;;;;45966:1;45939:15;45955:6;45939:23;;;;;;;;:::i;:::-;;;;;;;;;;:28;;45901:66;45898:108;;;45990:4;45983:11;;;;45898:108;46025:5;46018:12;;45806:232;;;;;:::o;26918:438::-;27159:12;:10;:12::i;:::-;27151:20;;:4;:20;;;:60;;;;27175:36;27192:4;27198:12;:10;:12::i;:::-;27175:16;:36::i;:::-;27151:60;27129:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;27296:52;27319:4;27325:2;27329:3;27334:7;27343:4;27296:22;:52::i;:::-;26918:438;;;;;:::o;43815:42::-;;;;:::o;43541:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47915:155::-;2120:13;:11;:13::i;:::-;47972:7:::1;47993;:5;:7::i;:::-;47985:21;;48014;47985:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47971:69;;;48059:2;48051:11;;;::::0;::::1;;47960:110;47915:155::o:0;47448:112::-;2120:13;:11;:13::i;:::-;47545:7:::1;47527:15;:25;;;;;;;;;;;;:::i;:::-;;47448:112:::0;:::o;47782:121::-;47852:4;2120:13;:11;:13::i;:::-;47875:15:::1;47891:3;47875:20;;;;;;;;:::i;:::-;;;;;;;;;;47868:27;;47782:121:::0;;;:::o;25371:524::-;25527:16;25588:3;:10;25569:8;:15;:29;25561:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25657:30;25704:8;:15;25690:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25657:63;;25738:9;25733:122;25757:8;:15;25753:1;:19;25733:122;;;25813:30;25823:8;25832:1;25823:11;;;;;;;;:::i;:::-;;;;;;;;25836:3;25840:1;25836:6;;;;;;;;:::i;:::-;;;;;;;;25813:9;:30::i;:::-;25794:13;25808:1;25794:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25774:3;;;;:::i;:::-;;;25733:122;;;;25874:13;25867:20;;;25371:524;;;;:::o;46288:275::-;2120:13;:11;:13::i;:::-;46458:41:::1;46469:5;46476:8;46486:12;46458:10;:41::i;:::-;46510:45;46521:5;46528:8;46538:12;46510:45;;;;;;;;;;;::::0;:10:::1;:45::i;:::-;46288:275:::0;;;;;:::o;46943:105::-;2120:13;:11;:13::i;:::-;47033:7:::1;47014:16;:26;;;;46943:105:::0;:::o;2882:103::-;2120:13;:11;:13::i;:::-;2947:30:::1;2974:1;2947:18;:30::i;:::-;2882:103::o:0;46151:129::-;46234:38;46245:10;46257:4;46263:8;46234:10;:38::i;:::-;46151:129;;:::o;46571:134::-;2120:13;:11;:13::i;:::-;46663:4:::1;46647:8;:13;46656:3;46647:13;;;;;;;;;;;:20;;;;;;;;;;;;:::i;:::-;;46693:3;46683:14;46687:4;46683:14;;;;;;:::i;:::-;;;;;;;;46571:134:::0;;:::o;43613:38::-;;;;:::o;47056:82::-;2120:13;:11;:13::i;:::-;47110:20:::1;;;;;;;;;;;;;;;;::::0;:9:::1;:20;;;;;;;;;;;;:::i;:::-;;47056:82::o:0;2234:87::-;2280:7;2307:6;;;;;;;;;;;2300:13;;2234:87;:::o;47568:101::-;2120:13;:11;:13::i;:::-;47656:5:::1;47641:12;:20;;;;;;;;;;;;:::i;:::-;;47568:101:::0;:::o;43514:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43782:26::-;;;;;;;;;;;;;:::o;25968:155::-;26063:52;26082:12;:10;:12::i;:::-;26096:8;26106;26063:18;:52::i;:::-;25968:155;;:::o;43741:32::-;;;;:::o;46046:97::-;46104:31;46110:10;46122:3;46127:7;46104:5;:31::i;:::-;46046:97;;:::o;43941:39::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44102:1696::-;44296:26;;;;;;;:::i;:::-;;;;;;;;;;;;;44286:37;;;;;;44271:9;44254:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;44244:38;;;;;;:79;;44236:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;44361:15;44395:6;44391:215;44411:4;:11;44407:1;:15;44391:215;;;44451:40;44470:4;44475:1;44470:7;;;;;;;;:::i;:::-;;;;;;;;44479:8;44488:1;44479:11;;;;;;;;:::i;:::-;;;;;;;;44451:18;:40::i;:::-;44443:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;44583:8;44592:1;44583:11;;;;;;;;:::i;:::-;;;;;;;;44570:10;:24;;;;:::i;:::-;44557:37;;44424:3;;;;;:::i;:::-;;;;44391:215;;;;44690:7;:5;:7::i;:::-;44676:21;;:10;:21;;;44672:830;;44714:21;44738:20;:32;44759:10;44738:32;;;;;;;;;;;;;;;;44714:56;;44840:27;;;;;;;:::i;:::-;;;;;;;;;;;;;44830:38;;;;;;44815:9;44798:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;44788:38;;;;;;:80;44785:355;;;44979:17;;44965:10;44946:16;:29;;;;:::i;:::-;:50;;44938:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;45048:12;;;;;;;;;;;:25;;;45074:10;45094:4;45113:10;45101:9;;:22;;;;:::i;:::-;45048:76;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44785:355;45209:26;;;;;;;:::i;:::-;;;;;;;;;;;;;45199:37;;;;;;45184:9;45167:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;45157:38;;;;;;:79;45154:337;;;45340:16;;45326:10;45307:16;:29;;;;:::i;:::-;:49;;45299:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;45442:10;45429;;:23;;;;:::i;:::-;45416:9;:36;;45408:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45154:337;44699:803;44672:830;45514:42;45525:10;45537:4;45543:8;45514:42;;;;;;;;;;;;:10;:42::i;:::-;45639:10;45604:20;:32;45625:10;45604:32;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;45569:20;:32;45590:10;45569:32;;;;;;;;;;;;;;;:80;;;;45666:6;45662:129;45682:4;:11;45678:1;:15;45662:129;;;45768:8;45777:1;45768:11;;;;;;;;:::i;:::-;;;;;;;;45741:15;45757:4;45762:1;45757:7;;;;;;;;:::i;:::-;;;;;;;;45741:24;;;;;;;;:::i;:::-;;;;;;;;;;:38;;;;:::i;:::-;45714:15;45730:4;45735:1;45730:7;;;;;;;;:::i;:::-;;;;;;;;45714:24;;;;;;;;:::i;:::-;;;;;;;;;:65;;;;45695:3;;;;;:::i;:::-;;;;45662:129;;;;44180:1618;44102:1696;;:::o;47146:85::-;2120:13;:11;:13::i;:::-;47202:21:::1;;;;;;;;;;;;;;;;::::0;:9:::1;:21;;;;;;;;;;;;:::i;:::-;;47146:85::o:0;47677:97::-;47721:13;47754:12;47747:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47677:97;:::o;26195:168::-;26294:4;26318:18;:27;26337:7;26318:27;;;;;;;;;;;;;;;:37;26346:8;26318:37;;;;;;;;;;;;;;;;;;;;;;;;;26311:44;;26195:168;;;;:::o;26435:406::-;26651:12;:10;:12::i;:::-;26643:20;;:4;:20;;;:60;;;;26667:36;26684:4;26690:12;:10;:12::i;:::-;26667:16;:36::i;:::-;26643:60;26621:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;26788:45;26806:4;26812:2;26816;26820:6;26828:4;26788:17;:45::i;:::-;26435:406;;;;;:::o;3140:201::-;2120:13;:11;:13::i;:::-;3249:1:::1;3229:22;;:8;:22;;;;3221:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3305:28;3324:8;3305:18;:28::i;:::-;3140:201:::0;:::o;15067:157::-;15152:4;15191:25;15176:40;;;:11;:40;;;;15169:47;;15067:157;;;:::o;2399:132::-;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2399:132::o;732:98::-;785:7;812:10;805:17;;732:98;:::o;29152:1146::-;29379:7;:14;29365:3;:10;:28;29357:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29471:1;29457:16;;:2;:16;;;;29449:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29528:16;29547:12;:10;:12::i;:::-;29528:31;;29572:60;29593:8;29603:4;29609:2;29613:3;29618:7;29627:4;29572:20;:60::i;:::-;29650:9;29645:421;29669:3;:10;29665:1;:14;29645:421;;;29701:10;29714:3;29718:1;29714:6;;;;;;;;:::i;:::-;;;;;;;;29701:19;;29735:14;29752:7;29760:1;29752:10;;;;;;;;:::i;:::-;;;;;;;;29735:27;;29779:19;29801:9;:13;29811:2;29801:13;;;;;;;;;;;:19;29815:4;29801:19;;;;;;;;;;;;;;;;29779:41;;29858:6;29843:11;:21;;29835:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29991:6;29977:11;:20;29955:9;:13;29965:2;29955:13;;;;;;;;;;;:19;29969:4;29955:19;;;;;;;;;;;;;;;:42;;;;30048:6;30027:9;:13;30037:2;30027:13;;;;;;;;;;;:17;30041:2;30027:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29686:380;;;29681:3;;;;:::i;:::-;;;29645:421;;;;30113:2;30083:47;;30107:4;30083:47;;30097:8;30083:47;;;30117:3;30122:7;30083:47;;;;;;;:::i;:::-;;;;;;;;30143:59;30163:8;30173:4;30179:2;30183:3;30188:7;30197:4;30143:19;:59::i;:::-;30215:75;30251:8;30261:4;30267:2;30271:3;30276:7;30285:4;30215:35;:75::i;:::-;29346:952;29152:1146;;;;;:::o;34917:969::-;35085:1;35069:18;;:4;:18;;;;35061:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35160:7;:14;35146:3;:10;:28;35138:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35232:16;35251:12;:10;:12::i;:::-;35232:31;;35276:66;35297:8;35307:4;35321:1;35325:3;35330:7;35276:66;;;;;;;;;;;;:20;:66::i;:::-;35360:9;35355:373;35379:3;:10;35375:1;:14;35355:373;;;35411:10;35424:3;35428:1;35424:6;;;;;;;;:::i;:::-;;;;;;;;35411:19;;35445:14;35462:7;35470:1;35462:10;;;;;;;;:::i;:::-;;;;;;;;35445:27;;35489:19;35511:9;:13;35521:2;35511:13;;;;;;;;;;;:19;35525:4;35511:19;;;;;;;;;;;;;;;;35489:41;;35568:6;35553:11;:21;;35545:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;35695:6;35681:11;:20;35659:9;:13;35669:2;35659:13;;;;;;;;;;;:19;35673:4;35659:19;;;;;;;;;;;;;;;:42;;;;35396:332;;;35391:3;;;;;:::i;:::-;;;;35355:373;;;;35783:1;35745:55;;35769:4;35745:55;;35759:8;35745:55;;;35787:3;35792:7;35745:55;;;;;;;:::i;:::-;;;;;;;;35813:65;35833:8;35843:4;35857:1;35861:3;35866:7;35813:65;;;;;;;;;;;;:19;:65::i;:::-;35050:836;34917:969;;;:::o;32748:813::-;32940:1;32926:16;;:2;:16;;;;32918:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33013:7;:14;32999:3;:10;:28;32991:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33085:16;33104:12;:10;:12::i;:::-;33085:31;;33129:66;33150:8;33168:1;33172:2;33176:3;33181:7;33190:4;33129:20;:66::i;:::-;33213:9;33208:103;33232:3;:10;33228:1;:14;33208:103;;;33289:7;33297:1;33289:10;;;;;;;;:::i;:::-;;;;;;;;33264:9;:17;33274:3;33278:1;33274:6;;;;;;;;:::i;:::-;;;;;;;;33264:17;;;;;;;;;;;:21;33282:2;33264:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;33244:3;;;;;:::i;:::-;;;;33208:103;;;;33364:2;33328:53;;33360:1;33328:53;;33342:8;33328:53;;;33368:3;33373:7;33328:53;;;;;;;:::i;:::-;;;;;;;;33394:65;33414:8;33432:1;33436:2;33440:3;33445:7;33454:4;33394:19;:65::i;:::-;33472:81;33508:8;33526:1;33530:2;33534:3;33539:7;33548:4;33472:35;:81::i;:::-;32907:654;32748:813;;;;:::o;3501:191::-;3575:16;3594:6;;;;;;;;;;;3575:25;;3620:8;3611:6;;:17;;;;;;;;;;;;;;;;;;3675:8;3644:40;;3665:8;3644:40;;;;;;;;;;;;3564:128;3501:191;:::o;36029:331::-;36184:8;36175:17;;:5;:17;;;;36167:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;36287:8;36249:18;:25;36268:5;36249:25;;;;;;;;;;;;;;;:35;36275:8;36249:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36333:8;36311:41;;36326:5;36311:41;;;36343:8;36311:41;;;;;;:::i;:::-;;;;;;;;36029:331;;;:::o;33859:808::-;34002:1;33986:18;;:4;:18;;;;33978:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34057:16;34076:12;:10;:12::i;:::-;34057:31;;34099:20;34122:21;34140:2;34122:17;:21::i;:::-;34099:44;;34154:24;34181:25;34199:6;34181:17;:25::i;:::-;34154:52;;34219:66;34240:8;34250:4;34264:1;34268:3;34273:7;34219:66;;;;;;;;;;;;:20;:66::i;:::-;34298:19;34320:9;:13;34330:2;34320:13;;;;;;;;;;;:19;34334:4;34320:19;;;;;;;;;;;;;;;;34298:41;;34373:6;34358:11;:21;;34350:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34492:6;34478:11;:20;34456:9;:13;34466:2;34456:13;;;;;;;;;;;:19;34470:4;34456:19;;;;;;;;;;;;;;;:42;;;;34566:1;34527:54;;34552:4;34527:54;;34542:8;34527:54;;;34570:2;34574:6;34527:54;;;;;;;:::i;:::-;;;;;;;;34594:65;34614:8;34624:4;34638:1;34642:3;34647:7;34594:65;;;;;;;;;;;;:19;:65::i;:::-;33967:700;;;;33859:808;;;:::o;27820:974::-;28022:1;28008:16;;:2;:16;;;;28000:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28079:16;28098:12;:10;:12::i;:::-;28079:31;;28121:20;28144:21;28162:2;28144:17;:21::i;:::-;28121:44;;28176:24;28203:25;28221:6;28203:17;:25::i;:::-;28176:52;;28241:60;28262:8;28272:4;28278:2;28282:3;28287:7;28296:4;28241:20;:60::i;:::-;28314:19;28336:9;:13;28346:2;28336:13;;;;;;;;;;;:19;28350:4;28336:19;;;;;;;;;;;;;;;;28314:41;;28389:6;28374:11;:21;;28366:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28514:6;28500:11;:20;28478:9;:13;28488:2;28478:13;;;;;;;;;;;:19;28492:4;28478:19;;;;;;;;;;;;;;;:42;;;;28563:6;28542:9;:13;28552:2;28542:13;;;;;;;;;;;:17;28556:2;28542:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28618:2;28587:46;;28612:4;28587:46;;28602:8;28587:46;;;28622:2;28626:6;28587:46;;;;;;;:::i;:::-;;;;;;;;28646:59;28666:8;28676:4;28682:2;28686:3;28691:7;28700:4;28646:19;:59::i;:::-;28718:68;28749:8;28759:4;28765:2;28769;28773:6;28781:4;28718:30;:68::i;:::-;27989:805;;;;27820:974;;;;;:::o;37318:221::-;;;;;;;:::o;38494:220::-;;;;;;;:::o;39474:813::-;39714:15;:2;:13;;;:15::i;:::-;39710:570;;;39767:2;39750:43;;;39794:8;39804:4;39810:3;39815:7;39824:4;39750:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39746:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;40142:6;40135:14;;;;;;;;;;;:::i;:::-;;;;;;;;39746:523;;;40191:62;;;;;;;;;;:::i;:::-;;;;;;;;39746:523;39923:48;;;39911:60;;;:8;:60;;;;39907:159;;39996:50;;;;;;;;;;:::i;:::-;;;;;;;;39907:159;39830:251;39710:570;39474:813;;;;;;:::o;40295:198::-;40361:16;40390:22;40429:1;40415:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40390:41;;40453:7;40442:5;40448:1;40442:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;40480:5;40473:12;;;40295:198;;;:::o;38722:744::-;38937:15;:2;:13;;;:15::i;:::-;38933:526;;;38990:2;38973:38;;;39012:8;39022:4;39028:2;39032:6;39040:4;38973:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38969:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;39321:6;39314:14;;;;;;;;;;;:::i;:::-;;;;;;;;38969:479;;;39370:62;;;;;;;;;;:::i;:::-;;;;;;;;38969:479;39107:43;;;39095:55;;;:8;:55;;;;39091:154;;39175:50;;;;;;;;;;:::i;:::-;;;;;;;;39091:154;39046:214;38933:526;38722:744;;;;;;:::o;4985:326::-;5045:4;5302:1;5280:7;:19;;;:23;5273:30;;4985:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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::-;3455:5;3486:6;3480:13;3471:22;;3502:30;3526:5;3502:30;:::i;:::-;3401:137;;;;:::o;3544:::-;3589:5;3627:6;3614:20;3605:29;;3643:32;3669:5;3643:32;:::i;:::-;3544:137;;;;:::o;3687:141::-;3743:5;3774:6;3768:13;3759:22;;3790:32;3816:5;3790:32;:::i;:::-;3687:141;;;;:::o;3847:338::-;3902:5;3951:3;3944:4;3936:6;3932:17;3928:27;3918:122;;3959:79;;:::i;:::-;3918:122;4076:6;4063:20;4101:78;4175:3;4167:6;4160:4;4152:6;4148:17;4101:78;:::i;:::-;4092:87;;3908:277;3847:338;;;;:::o;4205:340::-;4261:5;4310:3;4303:4;4295:6;4291:17;4287:27;4277:122;;4318:79;;:::i;:::-;4277:122;4435:6;4422:20;4460:79;4535:3;4527:6;4520:4;4512:6;4508:17;4460:79;:::i;:::-;4451:88;;4267:278;4205:340;;;;:::o;4551:139::-;4597:5;4635:6;4622:20;4613:29;;4651:33;4678:5;4651:33;:::i;:::-;4551:139;;;;:::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:1751::-;8316:6;8324;8332;8340;8348;8397:3;8385:9;8376:7;8372:23;8368:33;8365:120;;;8404:79;;:::i;:::-;8365:120;8524:1;8549:53;8594:7;8585:6;8574:9;8570:22;8549:53;:::i;:::-;8539:63;;8495:117;8679:2;8668:9;8664:18;8651:32;8710:18;8702:6;8699:30;8696:117;;;8732:79;;:::i;:::-;8696:117;8837:78;8907:7;8898:6;8887:9;8883:22;8837:78;:::i;:::-;8827:88;;8622:303;8992:2;8981:9;8977:18;8964:32;9023:18;9015:6;9012:30;9009:117;;;9045:79;;:::i;:::-;9009:117;9150:78;9220:7;9211:6;9200:9;9196:22;9150:78;:::i;:::-;9140:88;;8935:303;9305:2;9294:9;9290:18;9277:32;9336:18;9328:6;9325:30;9322:117;;;9358:79;;:::i;:::-;9322:117;9463:78;9533:7;9524:6;9513:9;9509:22;9463:78;:::i;:::-;9453:88;;9248:303;9618:3;9607:9;9603:19;9590:33;9650:18;9642:6;9639:30;9636:117;;;9672:79;;:::i;:::-;9636:117;9777:78;9847:7;9838:6;9827:9;9823:22;9777:78;:::i;:::-;9767:88;;9561:304;8121:1751;;;;;;;;:::o;9878:468::-;9943:6;9951;10000:2;9988:9;9979:7;9975:23;9971:32;9968:119;;;10006:79;;:::i;:::-;9968:119;10126:1;10151:53;10196:7;10187:6;10176:9;10172:22;10151:53;:::i;:::-;10141:63;;10097:117;10253:2;10279:50;10321:7;10312:6;10301:9;10297:22;10279:50;:::i;:::-;10269:60;;10224:115;9878:468;;;;;:::o;10352:474::-;10420:6;10428;10477:2;10465:9;10456:7;10452:23;10448:32;10445:119;;;10483:79;;:::i;:::-;10445:119;10603:1;10628:53;10673:7;10664:6;10653:9;10649:22;10628:53;:::i;:::-;10618:63;;10574:117;10730:2;10756:53;10801:7;10792:6;10781:9;10777:22;10756:53;:::i;:::-;10746:63;;10701:118;10352:474;;;;;:::o;10832:894::-;10950:6;10958;11007:2;10995:9;10986:7;10982:23;10978:32;10975:119;;;11013:79;;:::i;:::-;10975:119;11161:1;11150:9;11146:17;11133:31;11191:18;11183:6;11180:30;11177:117;;;11213:79;;:::i;:::-;11177:117;11318:78;11388:7;11379:6;11368:9;11364:22;11318:78;:::i;:::-;11308:88;;11104:302;11473:2;11462:9;11458:18;11445:32;11504:18;11496:6;11493:30;11490:117;;;11526:79;;:::i;:::-;11490:117;11631:78;11701:7;11692:6;11681:9;11677:22;11631:78;:::i;:::-;11621:88;;11416:303;10832:894;;;;;:::o;11732:539::-;11816:6;11865:2;11853:9;11844:7;11840:23;11836:32;11833:119;;;11871:79;;:::i;:::-;11833:119;12019:1;12008:9;12004:17;11991:31;12049:18;12041:6;12038:30;12035:117;;;12071:79;;:::i;:::-;12035:117;12176:78;12246:7;12237:6;12226:9;12222:22;12176:78;:::i;:::-;12166:88;;11962:302;11732:539;;;;:::o;12277:894::-;12395:6;12403;12452:2;12440:9;12431:7;12427:23;12423:32;12420:119;;;12458:79;;:::i;:::-;12420:119;12606:1;12595:9;12591:17;12578:31;12636:18;12628:6;12625:30;12622:117;;;12658:79;;:::i;:::-;12622:117;12763:78;12833:7;12824:6;12813:9;12809:22;12763:78;:::i;:::-;12753:88;;12549:302;12918:2;12907:9;12903:18;12890:32;12949:18;12941:6;12938:30;12935:117;;;12971:79;;:::i;:::-;12935:117;13076:78;13146:7;13137:6;13126:9;13122:22;13076:78;:::i;:::-;13066:88;;12861:303;12277:894;;;;;:::o;13177:345::-;13244:6;13293:2;13281:9;13272:7;13268:23;13264:32;13261:119;;;13299:79;;:::i;:::-;13261:119;13419:1;13444:61;13497:7;13488:6;13477:9;13473:22;13444:61;:::i;:::-;13434:71;;13390:125;13177:345;;;;:::o;13528:327::-;13586:6;13635:2;13623:9;13614:7;13610:23;13606:32;13603:119;;;13641:79;;:::i;:::-;13603:119;13761:1;13786:52;13830:7;13821:6;13810:9;13806:22;13786:52;:::i;:::-;13776:62;;13732:116;13528:327;;;;:::o;13861:349::-;13930:6;13979:2;13967:9;13958:7;13954:23;13950:32;13947:119;;;13985:79;;:::i;:::-;13947:119;14105:1;14130:63;14185:7;14176:6;14165:9;14161:22;14130:63;:::i;:::-;14120:73;;14076:127;13861:349;;;;:::o;14216:509::-;14285:6;14334:2;14322:9;14313:7;14309:23;14305:32;14302:119;;;14340:79;;:::i;:::-;14302:119;14488:1;14477:9;14473:17;14460:31;14518:18;14510:6;14507:30;14504:117;;;14540:79;;:::i;:::-;14504:117;14645:63;14700:7;14691:6;14680:9;14676:22;14645:63;:::i;:::-;14635:73;;14431:287;14216:509;;;;:::o;14731:329::-;14790:6;14839:2;14827:9;14818:7;14814:23;14810:32;14807:119;;;14845:79;;:::i;:::-;14807:119;14965:1;14990:53;15035:7;15026:6;15015:9;15011:22;14990:53;:::i;:::-;14980:63;;14936:117;14731:329;;;;:::o;15066:654::-;15144:6;15152;15201:2;15189:9;15180:7;15176:23;15172:32;15169:119;;;15207:79;;:::i;:::-;15169:119;15327:1;15352:53;15397:7;15388:6;15377:9;15373:22;15352:53;:::i;:::-;15342:63;;15298:117;15482:2;15471:9;15467:18;15454:32;15513:18;15505:6;15502:30;15499:117;;;15535:79;;:::i;:::-;15499:117;15640:63;15695:7;15686:6;15675:9;15671:22;15640:63;:::i;:::-;15630:73;;15425:288;15066:654;;;;;:::o;15726:474::-;15794:6;15802;15851:2;15839:9;15830:7;15826:23;15822:32;15819:119;;;15857:79;;:::i;:::-;15819:119;15977:1;16002:53;16047:7;16038:6;16027:9;16023:22;16002:53;:::i;:::-;15992:63;;15948:117;16104:2;16130:53;16175:7;16166:6;16155:9;16151:22;16130:53;:::i;:::-;16120:63;;16075:118;15726:474;;;;;:::o;16206:179::-;16275:10;16296:46;16338:3;16330:6;16296:46;:::i;:::-;16374:4;16369:3;16365:14;16351:28;;16206:179;;;;:::o;16391:118::-;16478:24;16496:5;16478:24;:::i;:::-;16473:3;16466:37;16391:118;;:::o;16545:732::-;16664:3;16693:54;16741:5;16693:54;:::i;:::-;16763:86;16842:6;16837:3;16763:86;:::i;:::-;16756:93;;16873:56;16923:5;16873:56;:::i;:::-;16952:7;16983:1;16968:284;16993:6;16990:1;16987:13;16968:284;;;17069:6;17063:13;17096:63;17155:3;17140:13;17096:63;:::i;:::-;17089:70;;17182:60;17235:6;17182:60;:::i;:::-;17172:70;;17028:224;17015:1;17012;17008:9;17003:14;;16968:284;;;16972:14;17268:3;17261:10;;16669:608;;;16545:732;;;;:::o;17283:109::-;17364:21;17379:5;17364:21;:::i;:::-;17359:3;17352:34;17283:109;;:::o;17398:360::-;17484:3;17512:38;17544:5;17512:38;:::i;:::-;17566:70;17629:6;17624:3;17566:70;:::i;:::-;17559:77;;17645:52;17690:6;17685:3;17678:4;17671:5;17667:16;17645:52;:::i;:::-;17722:29;17744:6;17722:29;:::i;:::-;17717:3;17713:39;17706:46;;17488:270;17398:360;;;;:::o;17764:161::-;17866:52;17912:5;17866:52;:::i;:::-;17861:3;17854:65;17764:161;;:::o;17931:364::-;18019:3;18047:39;18080:5;18047:39;:::i;:::-;18102:71;18166:6;18161:3;18102:71;:::i;:::-;18095:78;;18182:52;18227:6;18222:3;18215:4;18208:5;18204:16;18182:52;:::i;:::-;18259:29;18281:6;18259:29;:::i;:::-;18254:3;18250:39;18243:46;;18023:272;17931:364;;;;:::o;18325:845::-;18428:3;18465:5;18459:12;18494:36;18520:9;18494:36;:::i;:::-;18546:89;18628:6;18623:3;18546:89;:::i;:::-;18539:96;;18666:1;18655:9;18651:17;18682:1;18677:137;;;;18828:1;18823:341;;;;18644:520;;18677:137;18761:4;18757:9;18746;18742:25;18737:3;18730:38;18797:6;18792:3;18788:16;18781:23;;18677:137;;18823:341;18890:38;18922:5;18890:38;:::i;:::-;18950:1;18964:154;18978:6;18975:1;18972:13;18964:154;;;19052:7;19046:14;19042:1;19037:3;19033:11;19026:35;19102:1;19093:7;19089:15;19078:26;;19000:4;18997:1;18993:12;18988:17;;18964:154;;;19147:6;19142:3;19138:16;19131:23;;18830:334;;18644:520;;18432:738;;18325:845;;;;:::o;19176:366::-;19318:3;19339:67;19403:2;19398:3;19339:67;:::i;:::-;19332:74;;19415:93;19504:3;19415:93;:::i;:::-;19533:2;19528:3;19524:12;19517:19;;19176:366;;;:::o;19548:::-;19690:3;19711:67;19775:2;19770:3;19711:67;:::i;:::-;19704:74;;19787:93;19876:3;19787:93;:::i;:::-;19905:2;19900:3;19896:12;19889:19;;19548:366;;;:::o;19920:::-;20062:3;20083:67;20147:2;20142:3;20083:67;:::i;:::-;20076:74;;20159:93;20248:3;20159:93;:::i;:::-;20277:2;20272:3;20268:12;20261:19;;19920:366;;;:::o;20292:400::-;20452:3;20473:84;20555:1;20550:3;20473:84;:::i;:::-;20466:91;;20566:93;20655:3;20566:93;:::i;:::-;20684:1;20679:3;20675:11;20668:18;;20292:400;;;:::o;20698:366::-;20840:3;20861:67;20925:2;20920:3;20861:67;:::i;:::-;20854:74;;20937:93;21026:3;20937:93;:::i;:::-;21055:2;21050:3;21046:12;21039:19;;20698:366;;;:::o;21070:::-;21212:3;21233:67;21297:2;21292:3;21233:67;:::i;:::-;21226:74;;21309:93;21398:3;21309:93;:::i;:::-;21427:2;21422:3;21418:12;21411:19;;21070:366;;;:::o;21442:::-;21584:3;21605:67;21669:2;21664:3;21605:67;:::i;:::-;21598:74;;21681:93;21770:3;21681:93;:::i;:::-;21799:2;21794:3;21790:12;21783:19;;21442:366;;;:::o;21814:400::-;21974:3;21995:84;22077:1;22072:3;21995:84;:::i;:::-;21988:91;;22088:93;22177:3;22088:93;:::i;:::-;22206:1;22201:3;22197:11;22190:18;;21814:400;;;:::o;22220:366::-;22362:3;22383:67;22447:2;22442:3;22383:67;:::i;:::-;22376:74;;22459:93;22548:3;22459:93;:::i;:::-;22577:2;22572:3;22568:12;22561:19;;22220:366;;;:::o;22592:::-;22734:3;22755:67;22819:2;22814:3;22755:67;:::i;:::-;22748:74;;22831:93;22920:3;22831:93;:::i;:::-;22949:2;22944:3;22940:12;22933:19;;22592:366;;;:::o;22964:::-;23106:3;23127:67;23191:2;23186:3;23127:67;:::i;:::-;23120:74;;23203:93;23292:3;23203:93;:::i;:::-;23321:2;23316:3;23312:12;23305:19;;22964:366;;;:::o;23336:::-;23478:3;23499:67;23563:2;23558:3;23499:67;:::i;:::-;23492:74;;23575:93;23664:3;23575:93;:::i;:::-;23693:2;23688:3;23684:12;23677:19;;23336:366;;;:::o;23708:400::-;23868:3;23889:84;23971:1;23966:3;23889:84;:::i;:::-;23882:91;;23982:93;24071:3;23982:93;:::i;:::-;24100:1;24095:3;24091:11;24084:18;;23708:400;;;:::o;24114:398::-;24273:3;24294:83;24375:1;24370:3;24294:83;:::i;:::-;24287:90;;24386:93;24475:3;24386:93;:::i;:::-;24504:1;24499:3;24495:11;24488:18;;24114:398;;;:::o;24518:366::-;24660:3;24681:67;24745:2;24740:3;24681:67;:::i;:::-;24674:74;;24757:93;24846:3;24757:93;:::i;:::-;24875:2;24870:3;24866:12;24859:19;;24518:366;;;:::o;24890:::-;25032:3;25053:67;25117:2;25112:3;25053:67;:::i;:::-;25046:74;;25129:93;25218:3;25129:93;:::i;:::-;25247:2;25242:3;25238:12;25231:19;;24890:366;;;:::o;25262:::-;25404:3;25425:67;25489:2;25484:3;25425:67;:::i;:::-;25418:74;;25501:93;25590:3;25501:93;:::i;:::-;25619:2;25614:3;25610:12;25603:19;;25262:366;;;:::o;25634:::-;25776:3;25797:67;25861:2;25856:3;25797:67;:::i;:::-;25790:74;;25873:93;25962:3;25873:93;:::i;:::-;25991:2;25986:3;25982:12;25975:19;;25634:366;;;:::o;26006:::-;26148:3;26169:67;26233:2;26228:3;26169:67;:::i;:::-;26162:74;;26245:93;26334:3;26245:93;:::i;:::-;26363:2;26358:3;26354:12;26347:19;;26006:366;;;:::o;26378:::-;26520:3;26541:67;26605:2;26600:3;26541:67;:::i;:::-;26534:74;;26617:93;26706:3;26617:93;:::i;:::-;26735:2;26730:3;26726:12;26719:19;;26378:366;;;:::o;26750:::-;26892:3;26913:67;26977:2;26972:3;26913:67;:::i;:::-;26906:74;;26989:93;27078:3;26989:93;:::i;:::-;27107:2;27102:3;27098:12;27091:19;;26750:366;;;:::o;27122:::-;27264:3;27285:67;27349:2;27344:3;27285:67;:::i;:::-;27278:74;;27361:93;27450:3;27361:93;:::i;:::-;27479:2;27474:3;27470:12;27463:19;;27122:366;;;:::o;27494:108::-;27571:24;27589:5;27571:24;:::i;:::-;27566:3;27559:37;27494:108;;:::o;27608:118::-;27695:24;27713:5;27695:24;:::i;:::-;27690:3;27683:37;27608:118;;:::o;27732:269::-;27861:3;27883:92;27971:3;27962:6;27883:92;:::i;:::-;27876:99;;27992:3;27985:10;;27732:269;;;;:::o;28007:381::-;28192:3;28214:148;28358:3;28214:148;:::i;:::-;28207:155;;28379:3;28372:10;;28007:381;;;:::o;28394:::-;28579:3;28601:148;28745:3;28601:148;:::i;:::-;28594:155;;28766:3;28759:10;;28394:381;;;:::o;28781:::-;28966:3;28988:148;29132:3;28988:148;:::i;:::-;28981:155;;29153:3;29146:10;;28781:381;;;:::o;29168:379::-;29352:3;29374:147;29517:3;29374:147;:::i;:::-;29367:154;;29538:3;29531:10;;29168:379;;;:::o;29553:222::-;29646:4;29684:2;29673:9;29669:18;29661:26;;29697:71;29765:1;29754:9;29750:17;29741:6;29697:71;:::i;:::-;29553:222;;;;:::o;29781:1053::-;30104:4;30142:3;30131:9;30127:19;30119:27;;30156:71;30224:1;30213:9;30209:17;30200:6;30156:71;:::i;:::-;30237:72;30305:2;30294:9;30290:18;30281:6;30237:72;:::i;:::-;30356:9;30350:4;30346:20;30341:2;30330:9;30326:18;30319:48;30384:108;30487:4;30478:6;30384:108;:::i;:::-;30376:116;;30539:9;30533:4;30529:20;30524:2;30513:9;30509:18;30502:48;30567:108;30670:4;30661:6;30567:108;:::i;:::-;30559:116;;30723:9;30717:4;30713:20;30707:3;30696:9;30692:19;30685:49;30751:76;30822:4;30813:6;30751:76;:::i;:::-;30743:84;;29781:1053;;;;;;;;:::o;30840:442::-;30989:4;31027:2;31016:9;31012:18;31004:26;;31040:71;31108:1;31097:9;31093:17;31084:6;31040:71;:::i;:::-;31121:72;31189:2;31178:9;31174:18;31165:6;31121:72;:::i;:::-;31203;31271:2;31260:9;31256:18;31247:6;31203:72;:::i;:::-;30840:442;;;;;;:::o;31288:751::-;31511:4;31549:3;31538:9;31534:19;31526:27;;31563:71;31631:1;31620:9;31616:17;31607:6;31563:71;:::i;:::-;31644:72;31712:2;31701:9;31697:18;31688:6;31644:72;:::i;:::-;31726;31794:2;31783:9;31779:18;31770:6;31726:72;:::i;:::-;31808;31876:2;31865:9;31861:18;31852:6;31808:72;:::i;:::-;31928:9;31922:4;31918:20;31912:3;31901:9;31897:19;31890:49;31956:76;32027:4;32018:6;31956:76;:::i;:::-;31948:84;;31288:751;;;;;;;;:::o;32045:373::-;32188:4;32226:2;32215:9;32211:18;32203:26;;32275:9;32269:4;32265:20;32261:1;32250:9;32246:17;32239:47;32303:108;32406:4;32397:6;32303:108;:::i;:::-;32295:116;;32045:373;;;;:::o;32424:634::-;32645:4;32683:2;32672:9;32668:18;32660:26;;32732:9;32726:4;32722:20;32718:1;32707:9;32703:17;32696:47;32760:108;32863:4;32854:6;32760:108;:::i;:::-;32752:116;;32915:9;32909:4;32905:20;32900:2;32889:9;32885:18;32878:48;32943:108;33046:4;33037:6;32943:108;:::i;:::-;32935:116;;32424:634;;;;;:::o;33064:210::-;33151:4;33189:2;33178:9;33174:18;33166:26;;33202:65;33264:1;33253:9;33249:17;33240:6;33202:65;:::i;:::-;33064:210;;;;:::o;33280:252::-;33388:4;33426:2;33415:9;33411:18;33403:26;;33439:86;33522:1;33511:9;33507:17;33498:6;33439:86;:::i;:::-;33280:252;;;;:::o;33538:313::-;33651:4;33689:2;33678:9;33674:18;33666:26;;33738:9;33732:4;33728:20;33724:1;33713:9;33709:17;33702:47;33766:78;33839:4;33830:6;33766:78;:::i;:::-;33758:86;;33538:313;;;;:::o;33857:419::-;34023:4;34061:2;34050:9;34046:18;34038:26;;34110:9;34104:4;34100:20;34096:1;34085:9;34081:17;34074:47;34138:131;34264:4;34138:131;:::i;:::-;34130:139;;33857:419;;;:::o;34282:::-;34448:4;34486:2;34475:9;34471:18;34463:26;;34535:9;34529:4;34525:20;34521:1;34510:9;34506:17;34499:47;34563:131;34689:4;34563:131;:::i;:::-;34555:139;;34282:419;;;:::o;34707:::-;34873:4;34911:2;34900:9;34896:18;34888:26;;34960:9;34954:4;34950:20;34946:1;34935:9;34931:17;34924:47;34988:131;35114:4;34988:131;:::i;:::-;34980:139;;34707:419;;;:::o;35132:::-;35298:4;35336:2;35325:9;35321:18;35313:26;;35385:9;35379:4;35375:20;35371:1;35360:9;35356:17;35349:47;35413:131;35539:4;35413:131;:::i;:::-;35405:139;;35132:419;;;:::o;35557:::-;35723:4;35761:2;35750:9;35746:18;35738:26;;35810:9;35804:4;35800:20;35796:1;35785:9;35781:17;35774:47;35838:131;35964:4;35838:131;:::i;:::-;35830:139;;35557:419;;;:::o;35982:::-;36148:4;36186:2;36175:9;36171:18;36163:26;;36235:9;36229:4;36225:20;36221:1;36210:9;36206:17;36199:47;36263:131;36389:4;36263:131;:::i;:::-;36255:139;;35982:419;;;:::o;36407:::-;36573:4;36611:2;36600:9;36596:18;36588:26;;36660:9;36654:4;36650:20;36646:1;36635:9;36631:17;36624:47;36688:131;36814:4;36688:131;:::i;:::-;36680:139;;36407:419;;;:::o;36832:::-;36998:4;37036:2;37025:9;37021:18;37013:26;;37085:9;37079:4;37075:20;37071:1;37060:9;37056:17;37049:47;37113:131;37239:4;37113:131;:::i;:::-;37105:139;;36832:419;;;:::o;37257:::-;37423:4;37461:2;37450:9;37446:18;37438:26;;37510:9;37504:4;37500:20;37496:1;37485:9;37481:17;37474:47;37538:131;37664:4;37538:131;:::i;:::-;37530:139;;37257:419;;;:::o;37682:::-;37848:4;37886:2;37875:9;37871:18;37863:26;;37935:9;37929:4;37925:20;37921:1;37910:9;37906:17;37899:47;37963:131;38089:4;37963:131;:::i;:::-;37955:139;;37682:419;;;:::o;38107:::-;38273:4;38311:2;38300:9;38296:18;38288:26;;38360:9;38354:4;38350:20;38346:1;38335:9;38331:17;38324:47;38388:131;38514:4;38388:131;:::i;:::-;38380:139;;38107:419;;;:::o;38532:::-;38698:4;38736:2;38725:9;38721:18;38713:26;;38785:9;38779:4;38775:20;38771:1;38760:9;38756:17;38749:47;38813:131;38939:4;38813:131;:::i;:::-;38805:139;;38532:419;;;:::o;38957:::-;39123:4;39161:2;39150:9;39146:18;39138:26;;39210:9;39204:4;39200:20;39196:1;39185:9;39181:17;39174:47;39238:131;39364:4;39238:131;:::i;:::-;39230:139;;38957:419;;;:::o;39382:::-;39548:4;39586:2;39575:9;39571:18;39563:26;;39635:9;39629:4;39625:20;39621:1;39610:9;39606:17;39599:47;39663:131;39789:4;39663:131;:::i;:::-;39655:139;;39382:419;;;:::o;39807:::-;39973:4;40011:2;40000:9;39996:18;39988:26;;40060:9;40054:4;40050:20;40046:1;40035:9;40031:17;40024:47;40088:131;40214:4;40088:131;:::i;:::-;40080:139;;39807:419;;;:::o;40232:::-;40398:4;40436:2;40425:9;40421:18;40413:26;;40485:9;40479:4;40475:20;40471:1;40460:9;40456:17;40449:47;40513:131;40639:4;40513:131;:::i;:::-;40505:139;;40232:419;;;:::o;40657:::-;40823:4;40861:2;40850:9;40846:18;40838:26;;40910:9;40904:4;40900:20;40896:1;40885:9;40881:17;40874:47;40938:131;41064:4;40938:131;:::i;:::-;40930:139;;40657:419;;;:::o;41082:::-;41248:4;41286:2;41275:9;41271:18;41263:26;;41335:9;41329:4;41325:20;41321:1;41310:9;41306:17;41299:47;41363:131;41489:4;41363:131;:::i;:::-;41355:139;;41082:419;;;:::o;41507:222::-;41600:4;41638:2;41627:9;41623:18;41615:26;;41651:71;41719:1;41708:9;41704:17;41695:6;41651:71;:::i;:::-;41507:222;;;;:::o;41735:332::-;41856:4;41894:2;41883:9;41879:18;41871:26;;41907:71;41975:1;41964:9;41960:17;41951:6;41907:71;:::i;:::-;41988:72;42056:2;42045:9;42041:18;42032:6;41988:72;:::i;:::-;41735:332;;;;;:::o;42073:129::-;42107:6;42134:20;;:::i;:::-;42124:30;;42163:33;42191:4;42183:6;42163:33;:::i;:::-;42073:129;;;:::o;42208:75::-;42241:6;42274:2;42268:9;42258:19;;42208:75;:::o;42289:311::-;42366:4;42456:18;42448:6;42445:30;42442:56;;;42478:18;;:::i;:::-;42442:56;42528:4;42520:6;42516:17;42508:25;;42588:4;42582;42578:15;42570:23;;42289:311;;;:::o;42606:::-;42683:4;42773:18;42765:6;42762:30;42759:56;;;42795:18;;:::i;:::-;42759:56;42845:4;42837:6;42833:17;42825:25;;42905:4;42899;42895:15;42887:23;;42606:311;;;:::o;42923:307::-;42984:4;43074:18;43066:6;43063:30;43060:56;;;43096:18;;:::i;:::-;43060:56;43134:29;43156:6;43134:29;:::i;:::-;43126:37;;43218:4;43212;43208:15;43200:23;;42923:307;;;:::o;43236:308::-;43298:4;43388:18;43380:6;43377:30;43374:56;;;43410:18;;:::i;:::-;43374:56;43448:29;43470:6;43448:29;:::i;:::-;43440:37;;43532:4;43526;43522:15;43514:23;;43236:308;;;:::o;43550:132::-;43617:4;43640:3;43632:11;;43670:4;43665:3;43661:14;43653:22;;43550:132;;;:::o;43688:141::-;43737:4;43760:3;43752:11;;43783:3;43780:1;43773:14;43817:4;43814:1;43804:18;43796:26;;43688:141;;;:::o;43835:114::-;43902:6;43936:5;43930:12;43920:22;;43835:114;;;:::o;43955:98::-;44006:6;44040:5;44034:12;44024:22;;43955:98;;;:::o;44059:99::-;44111:6;44145:5;44139:12;44129:22;;44059:99;;;:::o;44164:113::-;44234:4;44266;44261:3;44257:14;44249:22;;44164:113;;;:::o;44283:184::-;44382:11;44416:6;44411:3;44404:19;44456:4;44451:3;44447:14;44432:29;;44283:184;;;;:::o;44473:168::-;44556:11;44590:6;44585:3;44578:19;44630:4;44625:3;44621:14;44606:29;;44473:168;;;;:::o;44647:147::-;44748:11;44785:3;44770:18;;44647:147;;;;:::o;44800:169::-;44884:11;44918:6;44913:3;44906:19;44958:4;44953:3;44949:14;44934:29;;44800:169;;;;:::o;44975:148::-;45077:11;45114:3;45099:18;;44975:148;;;;:::o;45129:305::-;45169:3;45188:20;45206:1;45188:20;:::i;:::-;45183:25;;45222:20;45240:1;45222:20;:::i;:::-;45217:25;;45376:1;45308:66;45304:74;45301:1;45298:81;45295:107;;;45382:18;;:::i;:::-;45295:107;45426:1;45423;45419:9;45412:16;;45129:305;;;;:::o;45440:348::-;45480:7;45503:20;45521:1;45503:20;:::i;:::-;45498:25;;45537:20;45555:1;45537:20;:::i;:::-;45532:25;;45725:1;45657:66;45653:74;45650:1;45647:81;45642:1;45635:9;45628:17;45624:105;45621:131;;;45732:18;;:::i;:::-;45621:131;45780:1;45777;45773:9;45762:20;;45440:348;;;;:::o;45794:191::-;45834:4;45854:20;45872:1;45854:20;:::i;:::-;45849:25;;45888:20;45906:1;45888:20;:::i;:::-;45883:25;;45927:1;45924;45921:8;45918:34;;;45932:18;;:::i;:::-;45918:34;45977:1;45974;45970:9;45962:17;;45794:191;;;;:::o;45991:96::-;46028:7;46057:24;46075:5;46057:24;:::i;:::-;46046:35;;45991:96;;;:::o;46093:90::-;46127:7;46170:5;46163:13;46156:21;46145:32;;46093:90;;;:::o;46189:149::-;46225:7;46265:66;46258:5;46254:78;46243:89;;46189:149;;;:::o;46344:126::-;46381:7;46421:42;46414:5;46410:54;46399:65;;46344:126;;;:::o;46476:77::-;46513:7;46542:5;46531:16;;46476:77;;;:::o;46559:141::-;46624:9;46657:37;46688:5;46657:37;:::i;:::-;46644:50;;46559:141;;;:::o;46706:126::-;46756:9;46789:37;46820:5;46789:37;:::i;:::-;46776:50;;46706:126;;;:::o;46838:113::-;46888:9;46921:24;46939:5;46921:24;:::i;:::-;46908:37;;46838:113;;;:::o;46957:154::-;47041:6;47036:3;47031;47018:30;47103:1;47094:6;47089:3;47085:16;47078:27;46957:154;;;:::o;47117:307::-;47185:1;47195:113;47209:6;47206:1;47203:13;47195:113;;;47294:1;47289:3;47285:11;47279:18;47275:1;47270:3;47266:11;47259:39;47231:2;47228:1;47224:10;47219:15;;47195:113;;;47326:6;47323:1;47320:13;47317:101;;;47406:1;47397:6;47392:3;47388:16;47381:27;47317:101;47166:258;47117:307;;;:::o;47430:320::-;47474:6;47511:1;47505:4;47501:12;47491:22;;47558:1;47552:4;47548:12;47579:18;47569:81;;47635:4;47627:6;47623:17;47613:27;;47569:81;47697:2;47689:6;47686:14;47666:18;47663:38;47660:84;;;47716:18;;:::i;:::-;47660:84;47481:269;47430:320;;;:::o;47756:281::-;47839:27;47861:4;47839:27;:::i;:::-;47831:6;47827:40;47969:6;47957:10;47954:22;47933:18;47921:10;47918:34;47915:62;47912:88;;;47980:18;;:::i;:::-;47912:88;48020:10;48016:2;48009:22;47799:238;47756:281;;:::o;48043:233::-;48082:3;48105:24;48123:5;48105:24;:::i;:::-;48096:33;;48151:66;48144:5;48141:77;48138:103;;;48221:18;;:::i;:::-;48138:103;48268:1;48261:5;48257:13;48250:20;;48043:233;;;:::o;48282:180::-;48330:77;48327:1;48320:88;48427:4;48424:1;48417:15;48451:4;48448:1;48441:15;48468:180;48516:77;48513:1;48506:88;48613:4;48610:1;48603:15;48637:4;48634:1;48627:15;48654:180;48702:77;48699:1;48692:88;48799:4;48796:1;48789:15;48823:4;48820:1;48813:15;48840:180;48888:77;48885:1;48878:88;48985:4;48982:1;48975:15;49009:4;49006:1;48999:15;49026:183;49061:3;49099:1;49081:16;49078:23;49075:128;;;49137:1;49134;49131;49116:23;49159:34;49190:1;49184:8;49159:34;:::i;:::-;49152:41;;49075:128;49026:183;:::o;49215:117::-;49324:1;49321;49314:12;49338:117;49447:1;49444;49437:12;49461:117;49570:1;49567;49560:12;49584:117;49693:1;49690;49683:12;49707:117;49816:1;49813;49806:12;49830:102;49871:6;49922:2;49918:7;49913:2;49906:5;49902:14;49898:28;49888:38;;49830:102;;;:::o;49938:106::-;49982:8;50031:5;50026:3;50022:15;50001:36;;49938:106;;;:::o;50050:227::-;50190:34;50186:1;50178:6;50174:14;50167:58;50259:10;50254:2;50246:6;50242:15;50235:35;50050:227;:::o;50283:225::-;50423:34;50419:1;50411:6;50407:14;50400:58;50492:8;50487:2;50479:6;50475:15;50468:33;50283:225;:::o;50514:223::-;50654:34;50650:1;50642:6;50638:14;50631:58;50723:6;50718:2;50710:6;50706:15;50699:31;50514:223;:::o;50743:156::-;50883:8;50879:1;50871:6;50867:14;50860:32;50743:156;:::o;50905:178::-;51045:30;51041:1;51033:6;51029:14;51022:54;50905:178;:::o;51089:229::-;51229:34;51225:1;51217:6;51213:14;51206:58;51298:12;51293:2;51285:6;51281:15;51274:37;51089:229;:::o;51324:233::-;51464:34;51460:1;51452:6;51448:14;51441:58;51533:16;51528:2;51520:6;51516:15;51509:41;51324:233;:::o;51563:156::-;51703:8;51699:1;51691:6;51687:14;51680:32;51563:156;:::o;51725:224::-;51865:34;51861:1;51853:6;51849:14;51842:58;51934:7;51929:2;51921:6;51917:15;51910:32;51725:224;:::o;51955:222::-;52095:34;52091:1;52083:6;52079:14;52072:58;52164:5;52159:2;52151:6;52147:15;52140:30;51955:222;:::o;52183:229::-;52323:34;52319:1;52311:6;52307:14;52300:58;52392:12;52387:2;52379:6;52375:15;52368:37;52183:229;:::o;52418:182::-;52558:34;52554:1;52546:6;52542:14;52535:58;52418:182;:::o;52606:157::-;52746:9;52742:1;52734:6;52730:14;52723:33;52606:157;:::o;52769:114::-;;:::o;52889:168::-;53029:20;53025:1;53017:6;53013:14;53006:44;52889:168;:::o;53063:170::-;53203:22;53199:1;53191:6;53187:14;53180:46;53063:170;:::o;53239:228::-;53379:34;53375:1;53367:6;53363:14;53356:58;53448:11;53443:2;53435:6;53431:15;53424:36;53239:228;:::o;53473:::-;53613:34;53609:1;53601:6;53597:14;53590:58;53682:11;53677:2;53669:6;53665:15;53658:36;53473:228;:::o;53707:227::-;53847:34;53843:1;53835:6;53831:14;53824:58;53916:10;53911:2;53903:6;53899:15;53892:35;53707:227;:::o;53940:220::-;54080:34;54076:1;54068:6;54064:14;54057:58;54149:3;54144:2;54136:6;54132:15;54125:28;53940:220;:::o;54166:239::-;54306:34;54302:1;54294:6;54290:14;54283:58;54375:22;54370:2;54362:6;54358:15;54351:47;54166:239;:::o;54411:233::-;54551:34;54547:1;54539:6;54535:14;54528:58;54620:16;54615:2;54607:6;54603:15;54596:41;54411:233;:::o;54650:711::-;54689:3;54727:4;54709:16;54706:26;54703:39;;;54735:5;;54703:39;54764:20;;:::i;:::-;54839:1;54821:16;54817:24;54814:1;54808:4;54793:49;54872:4;54866:11;54971:16;54964:4;54956:6;54952:17;54949:39;54916:18;54908:6;54905:30;54889:113;54886:146;;;55017:5;;;;54886:146;55063:6;55057:4;55053:17;55099:3;55093:10;55126:18;55118:6;55115:30;55112:43;;;55148:5;;;;;;55112:43;55196:6;55189:4;55184:3;55180:14;55176:27;55255:1;55237:16;55233:24;55227:4;55223:35;55218:3;55215:44;55212:57;;;55262:5;;;;;;;55212:57;55279;55327:6;55321:4;55317:17;55309:6;55305:30;55299:4;55279:57;:::i;:::-;55352:3;55345:10;;54693:668;;;;;54650:711;;:::o;55367:122::-;55440:24;55458:5;55440:24;:::i;:::-;55433:5;55430:35;55420:63;;55479:1;55476;55469:12;55420:63;55367:122;:::o;55495:116::-;55565:21;55580:5;55565:21;:::i;:::-;55558:5;55555:32;55545:60;;55601:1;55598;55591:12;55545:60;55495:116;:::o;55617:120::-;55689:23;55706:5;55689:23;:::i;:::-;55682:5;55679:34;55669:62;;55727:1;55724;55717:12;55669:62;55617:120;:::o;55743:122::-;55816:24;55834:5;55816:24;:::i;:::-;55809:5;55806:35;55796:63;;55855:1;55852;55845:12;55796:63;55743:122;:::o

Swarm Source

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