ETH Price: $3,524.61 (+0.51%)
Gas: 2 Gwei

Token

FLEXCLB ()
 

Overview

Max Total Supply

618

Holders

485

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x6088cddc21fe2db297b18565bec0324e098129e8
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:
FLEXCLB

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-11
*/

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


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.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://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


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

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts (last updated v4.6.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: balance query for the zero address");
        return _balances[id][account];
    }

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

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

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

        return batchBalances;
    }

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

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

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

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

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

        address operator = _msgSender();
        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}.
     *
     * 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`
     *
     * 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}.
     *
     * 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 a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

    /**
     * @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/ERC1155/extensions/ERC1155Supply.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

// File: contracts/FLEX COLLAB.sol


/*
 /$$$$$$$$ /$$       /$$$$$$$$ /$$   /$$        /$$$$$$  /$$       /$$$$$$$ 
| $$_____/| $$      | $$_____/| $$  / $$       /$$__  $$| $$      | $$__  $$
| $$      | $$      | $$      |  $$/ $$/      | $$  \__/| $$      | $$  \ $$
| $$$$$   | $$      | $$$$$    \  $$$$/       | $$      | $$      | $$$$$$$ 
| $$__/   | $$      | $$__/     >$$  $$       | $$      | $$      | $$__  $$
| $$      | $$      | $$       /$$/\  $$      | $$    $$| $$      | $$  \ $$
| $$      | $$$$$$$$| $$$$$$$$| $$  \ $$      |  $$$$$$/| $$$$$$$$| $$$$$$$/
|__/      |________/|________/|__/  |__/       \______/ |________/|_______/ 
*/

pragma solidity 0.8.7;



contract FLEXCLB is ERC1155Supply, Ownable 
{
    bool public saleIsActive = true;
    uint public activeBadgeId = 1;
    uint public maxPerTransaction = 999;
    uint public maxPerWallet = 999;
    uint public maxSupply = 1000;
    uint public constant NUMBER_RESERVED_TOKENS = 0;
    uint256 public constant PRICE = 200000000000000000;
    
    uint public reservedTokensMinted = 0;
    
    string public contractURIstr = "Flex x MBH";

    constructor() ERC1155("") {}
    

    function contractURI() public view returns (string memory) 
    {
       return contractURIstr;
    }
    
    function setContractURI(string memory newuri) external onlyOwner
    {
       contractURIstr = newuri;
    }
    
    function setURI(string memory newuri) external onlyOwner 
    {
        _setURI(newuri);
    }
    
    function mintToken(uint256 amount) external payable
    {
        require(msg.sender == tx.origin, "No transaction from smart contracts!");
        require(saleIsActive, "Sale must be active to mint");
        require(amount > 0 && amount <= maxPerTransaction, "Max per transaction reached, sale not allowed");
        require(balanceOf(msg.sender, activeBadgeId) + amount <= maxPerWallet, "Limit per wallet reached with this amount, sale not allowed");
        require(totalSupply(activeBadgeId) + amount <= maxSupply - (NUMBER_RESERVED_TOKENS - reservedTokensMinted), "Purchase would exceed max supply");
        require(msg.value >= PRICE * amount, "Not enough ETH for transaction");

        _mint(msg.sender, activeBadgeId, amount, "");
    }
    
    function mintReservedTokens(address to, uint256 amount) external onlyOwner 
    {
        require(reservedTokensMinted + amount <= NUMBER_RESERVED_TOKENS, "This amount is more than max allowed");

        _mint(to, activeBadgeId, amount, "");
        reservedTokensMinted = reservedTokensMinted + amount;
    }
    
    function withdraw() external 
    {
        payable(owner()).transfer(address(this).balance);
    }
    
    function flipSaleState() external onlyOwner 
    {
        saleIsActive = !saleIsActive;
    }
    
    function changeSaleDetails(uint _activeBadgeId, uint _maxPerTransaction, uint _maxPerWallet, uint _maxSupply) external onlyOwner 
    {
        activeBadgeId = _activeBadgeId;
        maxPerTransaction = _maxPerTransaction;
        maxPerWallet = _maxPerWallet;
        maxSupply = _maxSupply;
        saleIsActive = false;
    }
}

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":[],"name":"NUMBER_RESERVED_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activeBadgeId","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":"_activeBadgeId","type":"uint256"},{"internalType":"uint256","name":"_maxPerTransaction","type":"uint256"},{"internalType":"uint256","name":"_maxPerWallet","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"changeSaleDetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURIstr","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintReservedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedTokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","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":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600460146101000a81548160ff02191690831515021790555060016005556103e76006556103e76007556103e860085560006009556040518060400160405280600a81526020017f466c65782078204d424800000000000000000000000000000000000000000000815250600a908051906020019062000088929190620001c9565b503480156200009657600080fd5b5060405180602001604052806000815250620000b881620000df60201b60201c565b50620000d9620000cd620000fb60201b60201c565b6200010360201b60201c565b620002de565b8060029080519060200190620000f7929190620001c9565b5050565b600033905090565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001d79062000279565b90600052602060002090601f016020900481019282620001fb576000855562000247565b82601f106200021657805160ff191683800117855562000247565b8280016001018555821562000247579182015b828111156200024657825182559160200191906001019062000229565b5b5090506200025691906200025a565b5090565b5b80821115620002755760008160009055506001016200025b565b5090565b600060028204905060018216806200029257607f821691505b60208210811415620002a957620002a8620002af565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61415780620002ee6000396000f3fe6080604052600436106101cc5760003560e01c8063715018a6116100f7578063c634d03211610095578063eb8d244411610064578063eb8d244414610656578063f242432a14610681578063f2fde38b146106aa578063f3e38821146106d3576101cc565b8063c634d032146105a7578063d5abeb01146105c3578063e8a3d485146105ee578063e985e9c514610619576101cc565b8063938e3d7b116100d1578063938e3d7b146104ed578063a22cb46514610516578063b22edfbc1461053f578063bd85b0391461056a576101cc565b8063715018a6146104805780638d859f3e146104975780638da5cb5b146104c2576101cc565b806334918dfd1161016f5780634e1273f41161013e5780634e1273f4146103b45780634f558e79146103f157806357535c431461042e578063651bf4b014610457576101cc565b806334918dfd146103305780633ccfd60b14610347578063453c23101461035e5780634b980d6714610389576101cc565b80630612d364116101ab5780630612d364146102745780630e89341c1461029f57806311d26c18146102dc5780632eb2c2d614610307576101cc565b8062fdd58e146101d157806301ffc9a71461020e57806302fe53051461024b575b600080fd5b3480156101dd57600080fd5b506101f860048036038101906101f39190612b58565b6106fe565b604051610205919061355d565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190612c10565b6107c7565b6040516102429190613280565b60405180910390f35b34801561025757600080fd5b50610272600480360381019061026d9190612c6a565b6108a9565b005b34801561028057600080fd5b50610289610931565b604051610296919061329b565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c19190612cb3565b6109bf565b6040516102d3919061329b565b60405180910390f35b3480156102e857600080fd5b506102f1610a53565b6040516102fe919061355d565b60405180910390f35b34801561031357600080fd5b5061032e600480360381019061032991906129b2565b610a59565b005b34801561033c57600080fd5b50610345610afa565b005b34801561035357600080fd5b5061035c610ba2565b005b34801561036a57600080fd5b50610373610bf2565b604051610380919061355d565b60405180910390f35b34801561039557600080fd5b5061039e610bf8565b6040516103ab919061355d565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190612b98565b610bfe565b6040516103e89190613227565b60405180910390f35b3480156103fd57600080fd5b5061041860048036038101906104139190612cb3565b610d17565b6040516104259190613280565b60405180910390f35b34801561043a57600080fd5b5061045560048036038101906104509190612b58565b610d2b565b005b34801561046357600080fd5b5061047e60048036038101906104799190612ce0565b610e2d565b005b34801561048c57600080fd5b50610495610ee6565b005b3480156104a357600080fd5b506104ac610f6e565b6040516104b9919061355d565b60405180910390f35b3480156104ce57600080fd5b506104d7610f7a565b6040516104e4919061314a565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190612c6a565b610fa4565b005b34801561052257600080fd5b5061053d60048036038101906105389190612b18565b61103a565b005b34801561054b57600080fd5b50610554611050565b604051610561919061355d565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190612cb3565b611055565b60405161059e919061355d565b60405180910390f35b6105c160048036038101906105bc9190612cb3565b611072565b005b3480156105cf57600080fd5b506105d86112c4565b6040516105e5919061355d565b60405180910390f35b3480156105fa57600080fd5b506106036112ca565b604051610610919061329b565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190612972565b61135c565b60405161064d9190613280565b60405180910390f35b34801561066257600080fd5b5061066b6113f0565b6040516106789190613280565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190612a81565b611403565b005b3480156106b657600080fd5b506106d160048036038101906106cc9190612945565b6114a4565b005b3480156106df57600080fd5b506106e861159c565b6040516106f5919061355d565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561076f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107669061333d565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089257507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108a257506108a1826115a2565b5b9050919050565b6108b161160c565b73ffffffffffffffffffffffffffffffffffffffff166108cf610f7a565b73ffffffffffffffffffffffffffffffffffffffff1614610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091c9061345d565b60405180910390fd5b61092e81611614565b50565b600a805461093e9061388b565b80601f016020809104026020016040519081016040528092919081815260200182805461096a9061388b565b80156109b75780601f1061098c576101008083540402835291602001916109b7565b820191906000526020600020905b81548152906001019060200180831161099a57829003601f168201915b505050505081565b6060600280546109ce9061388b565b80601f01602080910402602001604051908101604052809291908181526020018280546109fa9061388b565b8015610a475780601f10610a1c57610100808354040283529160200191610a47565b820191906000526020600020905b815481529060010190602001808311610a2a57829003601f168201915b50505050509050919050565b60055481565b610a6161160c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610aa75750610aa685610aa161160c565b61135c565b5b610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add906133fd565b60405180910390fd5b610af3858585858561162e565b5050505050565b610b0261160c565b73ffffffffffffffffffffffffffffffffffffffff16610b20610f7a565b73ffffffffffffffffffffffffffffffffffffffff1614610b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6d9061345d565b60405180910390fd5b600460149054906101000a900460ff1615600460146101000a81548160ff021916908315150217905550565b610baa610f7a565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610bef573d6000803e3d6000fd5b50565b60075481565b60065481565b60608151835114610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b906134fd565b60405180910390fd5b6000835167ffffffffffffffff811115610c6157610c606139c4565b5b604051908082528060200260200182016040528015610c8f5781602001602082028036833780820191505090505b50905060005b8451811015610d0c57610cdc858281518110610cb457610cb3613995565b5b6020026020010151858381518110610ccf57610cce613995565b5b60200260200101516106fe565b828281518110610cef57610cee613995565b5b60200260200101818152505080610d05906138ee565b9050610c95565b508091505092915050565b600080610d2383611055565b119050919050565b610d3361160c565b73ffffffffffffffffffffffffffffffffffffffff16610d51610f7a565b73ffffffffffffffffffffffffffffffffffffffff1614610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e9061345d565b60405180910390fd5b600081600954610db791906136f1565b1115610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def9061331d565b60405180910390fd5b610e15826005548360405180602001604052806000815250611950565b80600954610e2391906136f1565b6009819055505050565b610e3561160c565b73ffffffffffffffffffffffffffffffffffffffff16610e53610f7a565b73ffffffffffffffffffffffffffffffffffffffff1614610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea09061345d565b60405180910390fd5b836005819055508260068190555081600781905550806008819055506000600460146101000a81548160ff02191690831515021790555050505050565b610eee61160c565b73ffffffffffffffffffffffffffffffffffffffff16610f0c610f7a565b73ffffffffffffffffffffffffffffffffffffffff1614610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f599061345d565b60405180910390fd5b610f6c6000611b01565b565b6702c68af0bb14000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fac61160c565b73ffffffffffffffffffffffffffffffffffffffff16610fca610f7a565b73ffffffffffffffffffffffffffffffffffffffff1614611020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110179061345d565b60405180910390fd5b80600a908051906020019061103692919061261d565b5050565b61104c61104561160c565b8383611bc7565b5050565b600081565b600060036000838152602001908152602001600020549050919050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d79061349d565b60405180910390fd5b600460149054906101000a900460ff1661112f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111269061339d565b60405180910390fd5b60008111801561114157506006548111155b611180576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611177906133bd565b60405180910390fd5b60075481611190336005546106fe565b61119a91906136f1565b11156111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d2906132fd565b60405180910390fd5b60095460006111ea91906137a1565b6008546111f791906137a1565b81611203600554611055565b61120d91906136f1565b111561124e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112459061341d565b60405180910390fd5b806702c68af0bb1400006112629190613747565b3410156112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b906134bd565b60405180910390fd5b6112c1336005548360405180602001604052806000815250611950565b50565b60085481565b6060600a80546112d99061388b565b80601f01602080910402602001604051908101604052809291908181526020018280546113059061388b565b80156113525780601f1061132757610100808354040283529160200191611352565b820191906000526020600020905b81548152906001019060200180831161133557829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600460149054906101000a900460ff1681565b61140b61160c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061145157506114508561144b61160c565b61135c565b5b611490576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114879061337d565b60405180910390fd5b61149d8585858585611d34565b5050505050565b6114ac61160c565b73ffffffffffffffffffffffffffffffffffffffff166114ca610f7a565b73ffffffffffffffffffffffffffffffffffffffff1614611520576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115179061345d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115879061335d565b60405180910390fd5b61159981611b01565b50565b60095481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b806002908051906020019061162a92919061261d565b5050565b8151835114611672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116699061351d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d9906133dd565b60405180910390fd5b60006116ec61160c565b90506116fc818787878787611fd0565b60005b84518110156118ad57600085828151811061171d5761171c613995565b5b60200260200101519050600085838151811061173c5761173b613995565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d49061343d565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461189291906136f1565b92505081905550505050806118a6906138ee565b90506116ff565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611924929190613249565b60405180910390a461193a8187878787876121a2565b6119488187878787876121aa565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b79061353d565b60405180910390fd5b60006119ca61160c565b905060006119d785612391565b905060006119e485612391565b90506119f583600089858589611fd0565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a5491906136f1565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611ad2929190613578565b60405180910390a4611ae9836000898585896121a2565b611af88360008989898961240b565b50505050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d906134dd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d279190613280565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b906133dd565b60405180910390fd5b6000611dae61160c565b90506000611dbb85612391565b90506000611dc885612391565b9050611dd8838989858589611fd0565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e669061343d565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f2491906136f1565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611fa1929190613578565b60405180910390a4611fb7848a8a86868a6121a2565b611fc5848a8a8a8a8a61240b565b505050505050505050565b611fde8686868686866125f2565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156120905760005b835181101561208e5782818151811061203257612031613995565b5b60200260200101516003600086848151811061205157612050613995565b5b60200260200101518152602001908152602001600020600082825461207691906136f1565b9250508190555080612087906138ee565b9050612016565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561219a5760005b83518110156121985760008482815181106120e6576120e5613995565b5b60200260200101519050600084838151811061210557612104613995565b5b602002602001015190506000600360008481526020019081526020016000205490508181101561216a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121619061347d565b60405180910390fd5b818103600360008581526020019081526020016000208190555050505080612191906138ee565b90506120c8565b505b505050505050565b505050505050565b6121c98473ffffffffffffffffffffffffffffffffffffffff166125fa565b15612389578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161220f959493929190613165565b602060405180830381600087803b15801561222957600080fd5b505af192505050801561225a57506040513d601f19601f820116820180604052508101906122579190612c3d565b60015b612300576122666139f3565b806308c379a014156122c3575061227b61402f565b8061228657506122c5565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ba919061329b565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f7906132bd565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237e906132dd565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156123b0576123af6139c4565b5b6040519080825280602002602001820160405280156123de5781602001602082028036833780820191505090505b50905082816000815181106123f6576123f5613995565b5b60200260200101818152505080915050919050565b61242a8473ffffffffffffffffffffffffffffffffffffffff166125fa565b156125ea578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016124709594939291906131cd565b602060405180830381600087803b15801561248a57600080fd5b505af19250505080156124bb57506040513d601f19601f820116820180604052508101906124b89190612c3d565b60015b612561576124c76139f3565b806308c379a0141561252457506124dc61402f565b806124e75750612526565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251b919061329b565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612558906132bd565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146125e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125df906132dd565b60405180910390fd5b505b505050505050565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546126299061388b565b90600052602060002090601f01602090048101928261264b5760008555612692565b82601f1061266457805160ff1916838001178555612692565b82800160010185558215612692579182015b82811115612691578251825591602001919060010190612676565b5b50905061269f91906126a3565b5090565b5b808211156126bc5760008160009055506001016126a4565b5090565b60006126d36126ce846135c6565b6135a1565b905080838252602082019050828560208602820111156126f6576126f5613a1a565b5b60005b85811015612726578161270c8882612824565b8452602084019350602083019250506001810190506126f9565b5050509392505050565b600061274361273e846135f2565b6135a1565b9050808382526020820190508285602086028201111561276657612765613a1a565b5b60005b85811015612796578161277c8882612930565b845260208401935060208301925050600181019050612769565b5050509392505050565b60006127b36127ae8461361e565b6135a1565b9050828152602081018484840111156127cf576127ce613a1f565b5b6127da848285613849565b509392505050565b60006127f56127f08461364f565b6135a1565b90508281526020810184848401111561281157612810613a1f565b5b61281c848285613849565b509392505050565b600081359050612833816140c5565b92915050565b600082601f83011261284e5761284d613a15565b5b813561285e8482602086016126c0565b91505092915050565b600082601f83011261287c5761287b613a15565b5b813561288c848260208601612730565b91505092915050565b6000813590506128a4816140dc565b92915050565b6000813590506128b9816140f3565b92915050565b6000815190506128ce816140f3565b92915050565b600082601f8301126128e9576128e8613a15565b5b81356128f98482602086016127a0565b91505092915050565b600082601f83011261291757612916613a15565b5b81356129278482602086016127e2565b91505092915050565b60008135905061293f8161410a565b92915050565b60006020828403121561295b5761295a613a29565b5b600061296984828501612824565b91505092915050565b6000806040838503121561298957612988613a29565b5b600061299785828601612824565b92505060206129a885828601612824565b9150509250929050565b600080600080600060a086880312156129ce576129cd613a29565b5b60006129dc88828901612824565b95505060206129ed88828901612824565b945050604086013567ffffffffffffffff811115612a0e57612a0d613a24565b5b612a1a88828901612867565b935050606086013567ffffffffffffffff811115612a3b57612a3a613a24565b5b612a4788828901612867565b925050608086013567ffffffffffffffff811115612a6857612a67613a24565b5b612a74888289016128d4565b9150509295509295909350565b600080600080600060a08688031215612a9d57612a9c613a29565b5b6000612aab88828901612824565b9550506020612abc88828901612824565b9450506040612acd88828901612930565b9350506060612ade88828901612930565b925050608086013567ffffffffffffffff811115612aff57612afe613a24565b5b612b0b888289016128d4565b9150509295509295909350565b60008060408385031215612b2f57612b2e613a29565b5b6000612b3d85828601612824565b9250506020612b4e85828601612895565b9150509250929050565b60008060408385031215612b6f57612b6e613a29565b5b6000612b7d85828601612824565b9250506020612b8e85828601612930565b9150509250929050565b60008060408385031215612baf57612bae613a29565b5b600083013567ffffffffffffffff811115612bcd57612bcc613a24565b5b612bd985828601612839565b925050602083013567ffffffffffffffff811115612bfa57612bf9613a24565b5b612c0685828601612867565b9150509250929050565b600060208284031215612c2657612c25613a29565b5b6000612c34848285016128aa565b91505092915050565b600060208284031215612c5357612c52613a29565b5b6000612c61848285016128bf565b91505092915050565b600060208284031215612c8057612c7f613a29565b5b600082013567ffffffffffffffff811115612c9e57612c9d613a24565b5b612caa84828501612902565b91505092915050565b600060208284031215612cc957612cc8613a29565b5b6000612cd784828501612930565b91505092915050565b60008060008060808587031215612cfa57612cf9613a29565b5b6000612d0887828801612930565b9450506020612d1987828801612930565b9350506040612d2a87828801612930565b9250506060612d3b87828801612930565b91505092959194509250565b6000612d53838361312c565b60208301905092915050565b612d68816137d5565b82525050565b6000612d7982613690565b612d8381856136be565b9350612d8e83613680565b8060005b83811015612dbf578151612da68882612d47565b9750612db1836136b1565b925050600181019050612d92565b5085935050505092915050565b612dd5816137e7565b82525050565b6000612de68261369b565b612df081856136cf565b9350612e00818560208601613858565b612e0981613a2e565b840191505092915050565b6000612e1f826136a6565b612e2981856136e0565b9350612e39818560208601613858565b612e4281613a2e565b840191505092915050565b6000612e5a6034836136e0565b9150612e6582613a4c565b604082019050919050565b6000612e7d6028836136e0565b9150612e8882613a9b565b604082019050919050565b6000612ea0603b836136e0565b9150612eab82613aea565b604082019050919050565b6000612ec36024836136e0565b9150612ece82613b39565b604082019050919050565b6000612ee6602b836136e0565b9150612ef182613b88565b604082019050919050565b6000612f096026836136e0565b9150612f1482613bd7565b604082019050919050565b6000612f2c6029836136e0565b9150612f3782613c26565b604082019050919050565b6000612f4f601b836136e0565b9150612f5a82613c75565b602082019050919050565b6000612f72602d836136e0565b9150612f7d82613c9e565b604082019050919050565b6000612f956025836136e0565b9150612fa082613ced565b604082019050919050565b6000612fb86032836136e0565b9150612fc382613d3c565b604082019050919050565b6000612fdb6020836136e0565b9150612fe682613d8b565b602082019050919050565b6000612ffe602a836136e0565b915061300982613db4565b604082019050919050565b60006130216020836136e0565b915061302c82613e03565b602082019050919050565b60006130446028836136e0565b915061304f82613e2c565b604082019050919050565b60006130676024836136e0565b915061307282613e7b565b604082019050919050565b600061308a601e836136e0565b915061309582613eca565b602082019050919050565b60006130ad6029836136e0565b91506130b882613ef3565b604082019050919050565b60006130d06029836136e0565b91506130db82613f42565b604082019050919050565b60006130f36028836136e0565b91506130fe82613f91565b604082019050919050565b60006131166021836136e0565b915061312182613fe0565b604082019050919050565b6131358161383f565b82525050565b6131448161383f565b82525050565b600060208201905061315f6000830184612d5f565b92915050565b600060a08201905061317a6000830188612d5f565b6131876020830187612d5f565b81810360408301526131998186612d6e565b905081810360608301526131ad8185612d6e565b905081810360808301526131c18184612ddb565b90509695505050505050565b600060a0820190506131e26000830188612d5f565b6131ef6020830187612d5f565b6131fc604083018661313b565b613209606083018561313b565b818103608083015261321b8184612ddb565b90509695505050505050565b600060208201905081810360008301526132418184612d6e565b905092915050565b600060408201905081810360008301526132638185612d6e565b905081810360208301526132778184612d6e565b90509392505050565b60006020820190506132956000830184612dcc565b92915050565b600060208201905081810360008301526132b58184612e14565b905092915050565b600060208201905081810360008301526132d681612e4d565b9050919050565b600060208201905081810360008301526132f681612e70565b9050919050565b6000602082019050818103600083015261331681612e93565b9050919050565b6000602082019050818103600083015261333681612eb6565b9050919050565b6000602082019050818103600083015261335681612ed9565b9050919050565b6000602082019050818103600083015261337681612efc565b9050919050565b6000602082019050818103600083015261339681612f1f565b9050919050565b600060208201905081810360008301526133b681612f42565b9050919050565b600060208201905081810360008301526133d681612f65565b9050919050565b600060208201905081810360008301526133f681612f88565b9050919050565b6000602082019050818103600083015261341681612fab565b9050919050565b6000602082019050818103600083015261343681612fce565b9050919050565b6000602082019050818103600083015261345681612ff1565b9050919050565b6000602082019050818103600083015261347681613014565b9050919050565b6000602082019050818103600083015261349681613037565b9050919050565b600060208201905081810360008301526134b68161305a565b9050919050565b600060208201905081810360008301526134d68161307d565b9050919050565b600060208201905081810360008301526134f6816130a0565b9050919050565b60006020820190508181036000830152613516816130c3565b9050919050565b60006020820190508181036000830152613536816130e6565b9050919050565b6000602082019050818103600083015261355681613109565b9050919050565b6000602082019050613572600083018461313b565b92915050565b600060408201905061358d600083018561313b565b61359a602083018461313b565b9392505050565b60006135ab6135bc565b90506135b782826138bd565b919050565b6000604051905090565b600067ffffffffffffffff8211156135e1576135e06139c4565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561360d5761360c6139c4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613639576136386139c4565b5b61364282613a2e565b9050602081019050919050565b600067ffffffffffffffff82111561366a576136696139c4565b5b61367382613a2e565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006136fc8261383f565b91506137078361383f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561373c5761373b613937565b5b828201905092915050565b60006137528261383f565b915061375d8361383f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561379657613795613937565b5b828202905092915050565b60006137ac8261383f565b91506137b78361383f565b9250828210156137ca576137c9613937565b5b828203905092915050565b60006137e08261381f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561387657808201518184015260208101905061385b565b83811115613885576000848401525b50505050565b600060028204905060018216806138a357607f821691505b602082108114156138b7576138b6613966565b5b50919050565b6138c682613a2e565b810181811067ffffffffffffffff821117156138e5576138e46139c4565b5b80604052505050565b60006138f98261383f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561392c5761392b613937565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613a125760046000803e613a0f600051613a3f565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4c696d6974207065722077616c6c65742072656163686564207769746820746860008201527f697320616d6f756e742c2073616c65206e6f7420616c6c6f7765640000000000602082015250565b7f5468697320616d6f756e74206973206d6f7265207468616e206d617820616c6c60008201527f6f77656400000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e740000000000600082015250565b7f4d617820706572207472616e73616374696f6e20726561636865642c2073616c60008201527f65206e6f7420616c6c6f77656400000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c79600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f4e6f207472616e73616374696f6e2066726f6d20736d61727420636f6e74726160008201527f6374732100000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682045544820666f72207472616e73616374696f6e0000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561403f576140c2565b6140476135bc565b60043d036004823e80513d602482011167ffffffffffffffff8211171561406f5750506140c2565b808201805167ffffffffffffffff81111561408d57505050506140c2565b80602083010160043d0385018111156140aa5750505050506140c2565b6140b9826020018501866138bd565b82955050505050505b90565b6140ce816137d5565b81146140d957600080fd5b50565b6140e5816137e7565b81146140f057600080fd5b50565b6140fc816137f3565b811461410757600080fd5b50565b6141138161383f565b811461411e57600080fd5b5056fea264697066735822122092a09799d77fb7922ec9cf6bccf33671ee4f4050972f2027d5b24071cebb8ab664736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101cc5760003560e01c8063715018a6116100f7578063c634d03211610095578063eb8d244411610064578063eb8d244414610656578063f242432a14610681578063f2fde38b146106aa578063f3e38821146106d3576101cc565b8063c634d032146105a7578063d5abeb01146105c3578063e8a3d485146105ee578063e985e9c514610619576101cc565b8063938e3d7b116100d1578063938e3d7b146104ed578063a22cb46514610516578063b22edfbc1461053f578063bd85b0391461056a576101cc565b8063715018a6146104805780638d859f3e146104975780638da5cb5b146104c2576101cc565b806334918dfd1161016f5780634e1273f41161013e5780634e1273f4146103b45780634f558e79146103f157806357535c431461042e578063651bf4b014610457576101cc565b806334918dfd146103305780633ccfd60b14610347578063453c23101461035e5780634b980d6714610389576101cc565b80630612d364116101ab5780630612d364146102745780630e89341c1461029f57806311d26c18146102dc5780632eb2c2d614610307576101cc565b8062fdd58e146101d157806301ffc9a71461020e57806302fe53051461024b575b600080fd5b3480156101dd57600080fd5b506101f860048036038101906101f39190612b58565b6106fe565b604051610205919061355d565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190612c10565b6107c7565b6040516102429190613280565b60405180910390f35b34801561025757600080fd5b50610272600480360381019061026d9190612c6a565b6108a9565b005b34801561028057600080fd5b50610289610931565b604051610296919061329b565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c19190612cb3565b6109bf565b6040516102d3919061329b565b60405180910390f35b3480156102e857600080fd5b506102f1610a53565b6040516102fe919061355d565b60405180910390f35b34801561031357600080fd5b5061032e600480360381019061032991906129b2565b610a59565b005b34801561033c57600080fd5b50610345610afa565b005b34801561035357600080fd5b5061035c610ba2565b005b34801561036a57600080fd5b50610373610bf2565b604051610380919061355d565b60405180910390f35b34801561039557600080fd5b5061039e610bf8565b6040516103ab919061355d565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d69190612b98565b610bfe565b6040516103e89190613227565b60405180910390f35b3480156103fd57600080fd5b5061041860048036038101906104139190612cb3565b610d17565b6040516104259190613280565b60405180910390f35b34801561043a57600080fd5b5061045560048036038101906104509190612b58565b610d2b565b005b34801561046357600080fd5b5061047e60048036038101906104799190612ce0565b610e2d565b005b34801561048c57600080fd5b50610495610ee6565b005b3480156104a357600080fd5b506104ac610f6e565b6040516104b9919061355d565b60405180910390f35b3480156104ce57600080fd5b506104d7610f7a565b6040516104e4919061314a565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190612c6a565b610fa4565b005b34801561052257600080fd5b5061053d60048036038101906105389190612b18565b61103a565b005b34801561054b57600080fd5b50610554611050565b604051610561919061355d565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190612cb3565b611055565b60405161059e919061355d565b60405180910390f35b6105c160048036038101906105bc9190612cb3565b611072565b005b3480156105cf57600080fd5b506105d86112c4565b6040516105e5919061355d565b60405180910390f35b3480156105fa57600080fd5b506106036112ca565b604051610610919061329b565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190612972565b61135c565b60405161064d9190613280565b60405180910390f35b34801561066257600080fd5b5061066b6113f0565b6040516106789190613280565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190612a81565b611403565b005b3480156106b657600080fd5b506106d160048036038101906106cc9190612945565b6114a4565b005b3480156106df57600080fd5b506106e861159c565b6040516106f5919061355d565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561076f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107669061333d565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089257507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108a257506108a1826115a2565b5b9050919050565b6108b161160c565b73ffffffffffffffffffffffffffffffffffffffff166108cf610f7a565b73ffffffffffffffffffffffffffffffffffffffff1614610925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091c9061345d565b60405180910390fd5b61092e81611614565b50565b600a805461093e9061388b565b80601f016020809104026020016040519081016040528092919081815260200182805461096a9061388b565b80156109b75780601f1061098c576101008083540402835291602001916109b7565b820191906000526020600020905b81548152906001019060200180831161099a57829003601f168201915b505050505081565b6060600280546109ce9061388b565b80601f01602080910402602001604051908101604052809291908181526020018280546109fa9061388b565b8015610a475780601f10610a1c57610100808354040283529160200191610a47565b820191906000526020600020905b815481529060010190602001808311610a2a57829003601f168201915b50505050509050919050565b60055481565b610a6161160c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610aa75750610aa685610aa161160c565b61135c565b5b610ae6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610add906133fd565b60405180910390fd5b610af3858585858561162e565b5050505050565b610b0261160c565b73ffffffffffffffffffffffffffffffffffffffff16610b20610f7a565b73ffffffffffffffffffffffffffffffffffffffff1614610b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6d9061345d565b60405180910390fd5b600460149054906101000a900460ff1615600460146101000a81548160ff021916908315150217905550565b610baa610f7a565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610bef573d6000803e3d6000fd5b50565b60075481565b60065481565b60608151835114610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b906134fd565b60405180910390fd5b6000835167ffffffffffffffff811115610c6157610c606139c4565b5b604051908082528060200260200182016040528015610c8f5781602001602082028036833780820191505090505b50905060005b8451811015610d0c57610cdc858281518110610cb457610cb3613995565b5b6020026020010151858381518110610ccf57610cce613995565b5b60200260200101516106fe565b828281518110610cef57610cee613995565b5b60200260200101818152505080610d05906138ee565b9050610c95565b508091505092915050565b600080610d2383611055565b119050919050565b610d3361160c565b73ffffffffffffffffffffffffffffffffffffffff16610d51610f7a565b73ffffffffffffffffffffffffffffffffffffffff1614610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e9061345d565b60405180910390fd5b600081600954610db791906136f1565b1115610df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610def9061331d565b60405180910390fd5b610e15826005548360405180602001604052806000815250611950565b80600954610e2391906136f1565b6009819055505050565b610e3561160c565b73ffffffffffffffffffffffffffffffffffffffff16610e53610f7a565b73ffffffffffffffffffffffffffffffffffffffff1614610ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea09061345d565b60405180910390fd5b836005819055508260068190555081600781905550806008819055506000600460146101000a81548160ff02191690831515021790555050505050565b610eee61160c565b73ffffffffffffffffffffffffffffffffffffffff16610f0c610f7a565b73ffffffffffffffffffffffffffffffffffffffff1614610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f599061345d565b60405180910390fd5b610f6c6000611b01565b565b6702c68af0bb14000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fac61160c565b73ffffffffffffffffffffffffffffffffffffffff16610fca610f7a565b73ffffffffffffffffffffffffffffffffffffffff1614611020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110179061345d565b60405180910390fd5b80600a908051906020019061103692919061261d565b5050565b61104c61104561160c565b8383611bc7565b5050565b600081565b600060036000838152602001908152602001600020549050919050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d79061349d565b60405180910390fd5b600460149054906101000a900460ff1661112f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111269061339d565b60405180910390fd5b60008111801561114157506006548111155b611180576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611177906133bd565b60405180910390fd5b60075481611190336005546106fe565b61119a91906136f1565b11156111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d2906132fd565b60405180910390fd5b60095460006111ea91906137a1565b6008546111f791906137a1565b81611203600554611055565b61120d91906136f1565b111561124e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112459061341d565b60405180910390fd5b806702c68af0bb1400006112629190613747565b3410156112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b906134bd565b60405180910390fd5b6112c1336005548360405180602001604052806000815250611950565b50565b60085481565b6060600a80546112d99061388b565b80601f01602080910402602001604051908101604052809291908181526020018280546113059061388b565b80156113525780601f1061132757610100808354040283529160200191611352565b820191906000526020600020905b81548152906001019060200180831161133557829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600460149054906101000a900460ff1681565b61140b61160c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061145157506114508561144b61160c565b61135c565b5b611490576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114879061337d565b60405180910390fd5b61149d8585858585611d34565b5050505050565b6114ac61160c565b73ffffffffffffffffffffffffffffffffffffffff166114ca610f7a565b73ffffffffffffffffffffffffffffffffffffffff1614611520576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115179061345d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611590576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115879061335d565b60405180910390fd5b61159981611b01565b50565b60095481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b806002908051906020019061162a92919061261d565b5050565b8151835114611672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116699061351d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d9906133dd565b60405180910390fd5b60006116ec61160c565b90506116fc818787878787611fd0565b60005b84518110156118ad57600085828151811061171d5761171c613995565b5b60200260200101519050600085838151811061173c5761173b613995565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d49061343d565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461189291906136f1565b92505081905550505050806118a6906138ee565b90506116ff565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611924929190613249565b60405180910390a461193a8187878787876121a2565b6119488187878787876121aa565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b79061353d565b60405180910390fd5b60006119ca61160c565b905060006119d785612391565b905060006119e485612391565b90506119f583600089858589611fd0565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a5491906136f1565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611ad2929190613578565b60405180910390a4611ae9836000898585896121a2565b611af88360008989898961240b565b50505050505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d906134dd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d279190613280565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9b906133dd565b60405180910390fd5b6000611dae61160c565b90506000611dbb85612391565b90506000611dc885612391565b9050611dd8838989858589611fd0565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e669061343d565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f2491906136f1565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611fa1929190613578565b60405180910390a4611fb7848a8a86868a6121a2565b611fc5848a8a8a8a8a61240b565b505050505050505050565b611fde8686868686866125f2565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156120905760005b835181101561208e5782818151811061203257612031613995565b5b60200260200101516003600086848151811061205157612050613995565b5b60200260200101518152602001908152602001600020600082825461207691906136f1565b9250508190555080612087906138ee565b9050612016565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561219a5760005b83518110156121985760008482815181106120e6576120e5613995565b5b60200260200101519050600084838151811061210557612104613995565b5b602002602001015190506000600360008481526020019081526020016000205490508181101561216a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121619061347d565b60405180910390fd5b818103600360008581526020019081526020016000208190555050505080612191906138ee565b90506120c8565b505b505050505050565b505050505050565b6121c98473ffffffffffffffffffffffffffffffffffffffff166125fa565b15612389578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161220f959493929190613165565b602060405180830381600087803b15801561222957600080fd5b505af192505050801561225a57506040513d601f19601f820116820180604052508101906122579190612c3d565b60015b612300576122666139f3565b806308c379a014156122c3575061227b61402f565b8061228657506122c5565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ba919061329b565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f7906132bd565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237e906132dd565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156123b0576123af6139c4565b5b6040519080825280602002602001820160405280156123de5781602001602082028036833780820191505090505b50905082816000815181106123f6576123f5613995565b5b60200260200101818152505080915050919050565b61242a8473ffffffffffffffffffffffffffffffffffffffff166125fa565b156125ea578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016124709594939291906131cd565b602060405180830381600087803b15801561248a57600080fd5b505af19250505080156124bb57506040513d601f19601f820116820180604052508101906124b89190612c3d565b60015b612561576124c76139f3565b806308c379a0141561252457506124dc61402f565b806124e75750612526565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251b919061329b565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612558906132bd565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146125e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125df906132dd565b60405180910390fd5b505b505050505050565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546126299061388b565b90600052602060002090601f01602090048101928261264b5760008555612692565b82601f1061266457805160ff1916838001178555612692565b82800160010185558215612692579182015b82811115612691578251825591602001919060010190612676565b5b50905061269f91906126a3565b5090565b5b808211156126bc5760008160009055506001016126a4565b5090565b60006126d36126ce846135c6565b6135a1565b905080838252602082019050828560208602820111156126f6576126f5613a1a565b5b60005b85811015612726578161270c8882612824565b8452602084019350602083019250506001810190506126f9565b5050509392505050565b600061274361273e846135f2565b6135a1565b9050808382526020820190508285602086028201111561276657612765613a1a565b5b60005b85811015612796578161277c8882612930565b845260208401935060208301925050600181019050612769565b5050509392505050565b60006127b36127ae8461361e565b6135a1565b9050828152602081018484840111156127cf576127ce613a1f565b5b6127da848285613849565b509392505050565b60006127f56127f08461364f565b6135a1565b90508281526020810184848401111561281157612810613a1f565b5b61281c848285613849565b509392505050565b600081359050612833816140c5565b92915050565b600082601f83011261284e5761284d613a15565b5b813561285e8482602086016126c0565b91505092915050565b600082601f83011261287c5761287b613a15565b5b813561288c848260208601612730565b91505092915050565b6000813590506128a4816140dc565b92915050565b6000813590506128b9816140f3565b92915050565b6000815190506128ce816140f3565b92915050565b600082601f8301126128e9576128e8613a15565b5b81356128f98482602086016127a0565b91505092915050565b600082601f83011261291757612916613a15565b5b81356129278482602086016127e2565b91505092915050565b60008135905061293f8161410a565b92915050565b60006020828403121561295b5761295a613a29565b5b600061296984828501612824565b91505092915050565b6000806040838503121561298957612988613a29565b5b600061299785828601612824565b92505060206129a885828601612824565b9150509250929050565b600080600080600060a086880312156129ce576129cd613a29565b5b60006129dc88828901612824565b95505060206129ed88828901612824565b945050604086013567ffffffffffffffff811115612a0e57612a0d613a24565b5b612a1a88828901612867565b935050606086013567ffffffffffffffff811115612a3b57612a3a613a24565b5b612a4788828901612867565b925050608086013567ffffffffffffffff811115612a6857612a67613a24565b5b612a74888289016128d4565b9150509295509295909350565b600080600080600060a08688031215612a9d57612a9c613a29565b5b6000612aab88828901612824565b9550506020612abc88828901612824565b9450506040612acd88828901612930565b9350506060612ade88828901612930565b925050608086013567ffffffffffffffff811115612aff57612afe613a24565b5b612b0b888289016128d4565b9150509295509295909350565b60008060408385031215612b2f57612b2e613a29565b5b6000612b3d85828601612824565b9250506020612b4e85828601612895565b9150509250929050565b60008060408385031215612b6f57612b6e613a29565b5b6000612b7d85828601612824565b9250506020612b8e85828601612930565b9150509250929050565b60008060408385031215612baf57612bae613a29565b5b600083013567ffffffffffffffff811115612bcd57612bcc613a24565b5b612bd985828601612839565b925050602083013567ffffffffffffffff811115612bfa57612bf9613a24565b5b612c0685828601612867565b9150509250929050565b600060208284031215612c2657612c25613a29565b5b6000612c34848285016128aa565b91505092915050565b600060208284031215612c5357612c52613a29565b5b6000612c61848285016128bf565b91505092915050565b600060208284031215612c8057612c7f613a29565b5b600082013567ffffffffffffffff811115612c9e57612c9d613a24565b5b612caa84828501612902565b91505092915050565b600060208284031215612cc957612cc8613a29565b5b6000612cd784828501612930565b91505092915050565b60008060008060808587031215612cfa57612cf9613a29565b5b6000612d0887828801612930565b9450506020612d1987828801612930565b9350506040612d2a87828801612930565b9250506060612d3b87828801612930565b91505092959194509250565b6000612d53838361312c565b60208301905092915050565b612d68816137d5565b82525050565b6000612d7982613690565b612d8381856136be565b9350612d8e83613680565b8060005b83811015612dbf578151612da68882612d47565b9750612db1836136b1565b925050600181019050612d92565b5085935050505092915050565b612dd5816137e7565b82525050565b6000612de68261369b565b612df081856136cf565b9350612e00818560208601613858565b612e0981613a2e565b840191505092915050565b6000612e1f826136a6565b612e2981856136e0565b9350612e39818560208601613858565b612e4281613a2e565b840191505092915050565b6000612e5a6034836136e0565b9150612e6582613a4c565b604082019050919050565b6000612e7d6028836136e0565b9150612e8882613a9b565b604082019050919050565b6000612ea0603b836136e0565b9150612eab82613aea565b604082019050919050565b6000612ec36024836136e0565b9150612ece82613b39565b604082019050919050565b6000612ee6602b836136e0565b9150612ef182613b88565b604082019050919050565b6000612f096026836136e0565b9150612f1482613bd7565b604082019050919050565b6000612f2c6029836136e0565b9150612f3782613c26565b604082019050919050565b6000612f4f601b836136e0565b9150612f5a82613c75565b602082019050919050565b6000612f72602d836136e0565b9150612f7d82613c9e565b604082019050919050565b6000612f956025836136e0565b9150612fa082613ced565b604082019050919050565b6000612fb86032836136e0565b9150612fc382613d3c565b604082019050919050565b6000612fdb6020836136e0565b9150612fe682613d8b565b602082019050919050565b6000612ffe602a836136e0565b915061300982613db4565b604082019050919050565b60006130216020836136e0565b915061302c82613e03565b602082019050919050565b60006130446028836136e0565b915061304f82613e2c565b604082019050919050565b60006130676024836136e0565b915061307282613e7b565b604082019050919050565b600061308a601e836136e0565b915061309582613eca565b602082019050919050565b60006130ad6029836136e0565b91506130b882613ef3565b604082019050919050565b60006130d06029836136e0565b91506130db82613f42565b604082019050919050565b60006130f36028836136e0565b91506130fe82613f91565b604082019050919050565b60006131166021836136e0565b915061312182613fe0565b604082019050919050565b6131358161383f565b82525050565b6131448161383f565b82525050565b600060208201905061315f6000830184612d5f565b92915050565b600060a08201905061317a6000830188612d5f565b6131876020830187612d5f565b81810360408301526131998186612d6e565b905081810360608301526131ad8185612d6e565b905081810360808301526131c18184612ddb565b90509695505050505050565b600060a0820190506131e26000830188612d5f565b6131ef6020830187612d5f565b6131fc604083018661313b565b613209606083018561313b565b818103608083015261321b8184612ddb565b90509695505050505050565b600060208201905081810360008301526132418184612d6e565b905092915050565b600060408201905081810360008301526132638185612d6e565b905081810360208301526132778184612d6e565b90509392505050565b60006020820190506132956000830184612dcc565b92915050565b600060208201905081810360008301526132b58184612e14565b905092915050565b600060208201905081810360008301526132d681612e4d565b9050919050565b600060208201905081810360008301526132f681612e70565b9050919050565b6000602082019050818103600083015261331681612e93565b9050919050565b6000602082019050818103600083015261333681612eb6565b9050919050565b6000602082019050818103600083015261335681612ed9565b9050919050565b6000602082019050818103600083015261337681612efc565b9050919050565b6000602082019050818103600083015261339681612f1f565b9050919050565b600060208201905081810360008301526133b681612f42565b9050919050565b600060208201905081810360008301526133d681612f65565b9050919050565b600060208201905081810360008301526133f681612f88565b9050919050565b6000602082019050818103600083015261341681612fab565b9050919050565b6000602082019050818103600083015261343681612fce565b9050919050565b6000602082019050818103600083015261345681612ff1565b9050919050565b6000602082019050818103600083015261347681613014565b9050919050565b6000602082019050818103600083015261349681613037565b9050919050565b600060208201905081810360008301526134b68161305a565b9050919050565b600060208201905081810360008301526134d68161307d565b9050919050565b600060208201905081810360008301526134f6816130a0565b9050919050565b60006020820190508181036000830152613516816130c3565b9050919050565b60006020820190508181036000830152613536816130e6565b9050919050565b6000602082019050818103600083015261355681613109565b9050919050565b6000602082019050613572600083018461313b565b92915050565b600060408201905061358d600083018561313b565b61359a602083018461313b565b9392505050565b60006135ab6135bc565b90506135b782826138bd565b919050565b6000604051905090565b600067ffffffffffffffff8211156135e1576135e06139c4565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561360d5761360c6139c4565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613639576136386139c4565b5b61364282613a2e565b9050602081019050919050565b600067ffffffffffffffff82111561366a576136696139c4565b5b61367382613a2e565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006136fc8261383f565b91506137078361383f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561373c5761373b613937565b5b828201905092915050565b60006137528261383f565b915061375d8361383f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561379657613795613937565b5b828202905092915050565b60006137ac8261383f565b91506137b78361383f565b9250828210156137ca576137c9613937565b5b828203905092915050565b60006137e08261381f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561387657808201518184015260208101905061385b565b83811115613885576000848401525b50505050565b600060028204905060018216806138a357607f821691505b602082108114156138b7576138b6613966565b5b50919050565b6138c682613a2e565b810181811067ffffffffffffffff821117156138e5576138e46139c4565b5b80604052505050565b60006138f98261383f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561392c5761392b613937565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d1115613a125760046000803e613a0f600051613a3f565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f4c696d6974207065722077616c6c65742072656163686564207769746820746860008201527f697320616d6f756e742c2073616c65206e6f7420616c6c6f7765640000000000602082015250565b7f5468697320616d6f756e74206973206d6f7265207468616e206d617820616c6c60008201527f6f77656400000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f53616c65206d7573742062652061637469766520746f206d696e740000000000600082015250565b7f4d617820706572207472616e73616374696f6e20726561636865642c2073616c60008201527f65206e6f7420616c6c6f77656400000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f507572636861736520776f756c6420657863656564206d617820737570706c79600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f4e6f207472616e73616374696f6e2066726f6d20736d61727420636f6e74726160008201527f6374732100000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682045544820666f72207472616e73616374696f6e0000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d101561403f576140c2565b6140476135bc565b60043d036004823e80513d602482011167ffffffffffffffff8211171561406f5750506140c2565b808201805167ffffffffffffffff81111561408d57505050506140c2565b80602083010160043d0385018111156140aa5750505050506140c2565b6140b9826020018501866138bd565b82955050505050505b90565b6140ce816137d5565b81146140d957600080fd5b50565b6140e5816137e7565b81146140f057600080fd5b50565b6140fc816137f3565b811461410757600080fd5b50565b6141138161383f565b811461411e57600080fd5b5056fea264697066735822122092a09799d77fb7922ec9cf6bccf33671ee4f4050972f2027d5b24071cebb8ab664736f6c63430008070033

Deployed Bytecode Sourcemap

41562:2507:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23392:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22415:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42301:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41968:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23136:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41652:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25331:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43621:97;;;;;;;;;;;;;:::i;:::-;;43507:102;;;;;;;;;;;;;:::i;:::-;;41730:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41688:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23789:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39723:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43179:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43730:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2606:103;;;;;;;;;;;;;:::i;:::-;;41856:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1955:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42178:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24386:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41802:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39512:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42410:757;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41767:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42062:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24613:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41614:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24853:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2864:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41919:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23392:231;23478:7;23525:1;23506:21;;:7;:21;;;;23498:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23593:9;:13;23603:2;23593:13;;;;;;;;;;;:22;23607:7;23593:22;;;;;;;;;;;;;;;;23586:29;;23392:231;;;;:::o;22415:310::-;22517:4;22569:26;22554:41;;;:11;:41;;;;:110;;;;22627:37;22612:52;;;:11;:52;;;;22554:110;:163;;;;22681:36;22705:11;22681:23;:36::i;:::-;22554:163;22534:183;;22415:310;;;:::o;42301:97::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42375:15:::1;42383:6;42375:7;:15::i;:::-;42301:97:::0;:::o;41968:43::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23136:105::-;23196:13;23229:4;23222:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23136:105;;;:::o;41652:29::-;;;;:::o;25331:442::-;25572:12;:10;:12::i;:::-;25564:20;;:4;:20;;;:60;;;;25588:36;25605:4;25611:12;:10;:12::i;:::-;25588:16;:36::i;:::-;25564:60;25542:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25713:52;25736:4;25742:2;25746:3;25751:7;25760:4;25713:22;:52::i;:::-;25331:442;;;;;:::o;43621:97::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43698:12:::1;;;;;;;;;;;43697:13;43682:12;;:28;;;;;;;;;;;;;;;;;;43621:97::o:0;43507:102::-;43561:7;:5;:7::i;:::-;43553:25;;:48;43579:21;43553:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43507:102::o;41730:30::-;;;;:::o;41688:35::-;;;;:::o;23789:524::-;23945:16;24006:3;:10;23987:8;:15;:29;23979:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;24075:30;24122:8;:15;24108:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24075:63;;24156:9;24151:122;24175:8;:15;24171:1;:19;24151:122;;;24231:30;24241:8;24250:1;24241:11;;;;;;;;:::i;:::-;;;;;;;;24254:3;24258:1;24254:6;;;;;;;;:::i;:::-;;;;;;;;24231:9;:30::i;:::-;24212:13;24226:1;24212:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;24192:3;;;;:::i;:::-;;;24151:122;;;;24292:13;24285:20;;;23789:524;;;;:::o;39723:122::-;39780:4;39836:1;39804:29;39830:2;39804:25;:29::i;:::-;:33;39797:40;;39723:122;;;:::o;43179:316::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41848:1:::1;43302:6;43279:20;;:29;;;;:::i;:::-;:55;;43271:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;43388:36;43394:2;43398:13;;43413:6;43388:36;;;;;;;;;;;::::0;:5:::1;:36::i;:::-;43481:6;43458:20;;:29;;;;:::i;:::-;43435:20;:52;;;;43179:316:::0;;:::o;43730:336::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43892:14:::1;43876:13;:30;;;;43937:18;43917:17;:38;;;;43981:13;43966:12;:28;;;;44017:10;44005:9;:22;;;;44053:5;44038:12;;:20;;;;;;;;;;;;;;;;;;43730:336:::0;;;;:::o;2606:103::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2671:30:::1;2698:1;2671:18;:30::i;:::-;2606:103::o:0;41856:50::-;41888:18;41856:50;:::o;1955:87::-;2001:7;2028:6;;;;;;;;;;;2021:13;;1955:87;:::o;42178:111::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42275:6:::1;42258:14;:23;;;;;;;;;;;;:::i;:::-;;42178:111:::0;:::o;24386:155::-;24481:52;24500:12;:10;:12::i;:::-;24514:8;24524;24481:18;:52::i;:::-;24386:155;;:::o;41802:47::-;41848:1;41802:47;:::o;39512:113::-;39574:7;39601:12;:16;39614:2;39601:16;;;;;;;;;;;;39594:23;;39512:113;;;:::o;42410:757::-;42500:9;42486:23;;:10;:23;;;42478:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;42569:12;;;;;;;;;;;42561:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;42641:1;42632:6;:10;:41;;;;;42656:17;;42646:6;:27;;42632:41;42624:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;42791:12;;42781:6;42742:36;42752:10;42764:13;;42742:9;:36::i;:::-;:45;;;;:::i;:::-;:61;;42734:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;42963:20;;41848:1;42938:45;;;;:::i;:::-;42925:9;;:59;;;;:::i;:::-;42915:6;42886:26;42898:13;;42886:11;:26::i;:::-;:35;;;;:::i;:::-;:98;;42878:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;43061:6;41888:18;43053:14;;;;:::i;:::-;43040:9;:27;;43032:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43115:44;43121:10;43133:13;;43148:6;43115:44;;;;;;;;;;;;:5;:44::i;:::-;42410:757;:::o;41767:28::-;;;;:::o;42062:104::-;42106:13;42144:14;42137:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42062:104;:::o;24613:168::-;24712:4;24736:18;:27;24755:7;24736:27;;;;;;;;;;;;;;;:37;24764:8;24736:37;;;;;;;;;;;;;;;;;;;;;;;;;24729:44;;24613:168;;;;:::o;41614:31::-;;;;;;;;;;;;;:::o;24853:401::-;25069:12;:10;:12::i;:::-;25061:20;;:4;:20;;;:60;;;;25085:36;25102:4;25108:12;:10;:12::i;:::-;25085:16;:36::i;:::-;25061:60;25039:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;25201:45;25219:4;25225:2;25229;25233:6;25241:4;25201:17;:45::i;:::-;24853:401;;;;;:::o;2864:201::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2973:1:::1;2953:22;;:8;:22;;;;2945:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3029:28;3048:8;3029:18;:28::i;:::-;2864:201:::0;:::o;41919:36::-;;;;:::o;13708:157::-;13793:4;13832:25;13817:40;;;:11;:40;;;;13810:47;;13708:157;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;29559:88::-;29633:6;29626:4;:13;;;;;;;;;;;;:::i;:::-;;29559:88;:::o;27569:1146::-;27796:7;:14;27782:3;:10;:28;27774:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27888:1;27874:16;;:2;:16;;;;27866:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27945:16;27964:12;:10;:12::i;:::-;27945:31;;27989:60;28010:8;28020:4;28026:2;28030:3;28035:7;28044:4;27989:20;:60::i;:::-;28067:9;28062:421;28086:3;:10;28082:1;:14;28062:421;;;28118:10;28131:3;28135:1;28131:6;;;;;;;;:::i;:::-;;;;;;;;28118:19;;28152:14;28169:7;28177:1;28169:10;;;;;;;;:::i;:::-;;;;;;;;28152:27;;28196:19;28218:9;:13;28228:2;28218:13;;;;;;;;;;;:19;28232:4;28218:19;;;;;;;;;;;;;;;;28196:41;;28275:6;28260:11;:21;;28252:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28408:6;28394:11;:20;28372:9;:13;28382:2;28372:13;;;;;;;;;;;:19;28386:4;28372:19;;;;;;;;;;;;;;;:42;;;;28465:6;28444:9;:13;28454:2;28444:13;;;;;;;;;;;:17;28458:2;28444:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28103:380;;;28098:3;;;;:::i;:::-;;;28062:421;;;;28530:2;28500:47;;28524:4;28500:47;;28514:8;28500:47;;;28534:3;28539:7;28500:47;;;;;;;:::i;:::-;;;;;;;;28560:59;28580:8;28590:4;28596:2;28600:3;28605:7;28614:4;28560:19;:59::i;:::-;28632:75;28668:8;28678:4;28684:2;28688:3;28693:7;28702:4;28632:35;:75::i;:::-;27763:952;27569:1146;;;;;:::o;30033:729::-;30200:1;30186:16;;:2;:16;;;;30178:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30253:16;30272:12;:10;:12::i;:::-;30253:31;;30295:20;30318:21;30336:2;30318:17;:21::i;:::-;30295:44;;30350:24;30377:25;30395:6;30377:17;:25::i;:::-;30350:52;;30415:66;30436:8;30454:1;30458:2;30462:3;30467:7;30476:4;30415:20;:66::i;:::-;30515:6;30494:9;:13;30504:2;30494:13;;;;;;;;;;;:17;30508:2;30494:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;30574:2;30537:52;;30570:1;30537:52;;30552:8;30537:52;;;30578:2;30582:6;30537:52;;;;;;;:::i;:::-;;;;;;;;30602:65;30622:8;30640:1;30644:2;30648:3;30653:7;30662:4;30602:19;:65::i;:::-;30680:74;30711:8;30729:1;30733:2;30737;30741:6;30749:4;30680:30;:74::i;:::-;30167:595;;;30033:729;;;;:::o;3225:191::-;3299:16;3318:6;;;;;;;;;;;3299:25;;3344:8;3335:6;;:17;;;;;;;;;;;;;;;;;;3399:8;3368:40;;3389:8;3368:40;;;;;;;;;;;;3288:128;3225:191;:::o;34303:331::-;34458:8;34449:17;;:5;:17;;;;34441:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34561:8;34523:18;:25;34542:5;34523:25;;;;;;;;;;;;;;;:35;34549:8;34523:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34607:8;34585:41;;34600:5;34585:41;;;34617:8;34585:41;;;;;;:::i;:::-;;;;;;;;34303:331;;;:::o;26237:974::-;26439:1;26425:16;;:2;:16;;;;26417:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26496:16;26515:12;:10;:12::i;:::-;26496:31;;26538:20;26561:21;26579:2;26561:17;:21::i;:::-;26538:44;;26593:24;26620:25;26638:6;26620:17;:25::i;:::-;26593:52;;26658:60;26679:8;26689:4;26695:2;26699:3;26704:7;26713:4;26658:20;:60::i;:::-;26731:19;26753:9;:13;26763:2;26753:13;;;;;;;;;;;:19;26767:4;26753:19;;;;;;;;;;;;;;;;26731:41;;26806:6;26791:11;:21;;26783:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26931:6;26917:11;:20;26895:9;:13;26905:2;26895:13;;;;;;;;;;;:19;26909:4;26895:19;;;;;;;;;;;;;;;:42;;;;26980:6;26959:9;:13;26969:2;26959:13;;;;;;;;;;;:17;26973:2;26959:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27035:2;27004:46;;27029:4;27004:46;;27019:8;27004:46;;;27039:2;27043:6;27004:46;;;;;;;:::i;:::-;;;;;;;;27063:59;27083:8;27093:4;27099:2;27103:3;27108:7;27117:4;27063:19;:59::i;:::-;27135:68;27166:8;27176:4;27182:2;27186;27190:6;27198:4;27135:30;:68::i;:::-;26406:805;;;;26237:974;;;;;:::o;39920:931::-;40159:66;40186:8;40196:4;40202:2;40206:3;40211:7;40220:4;40159:26;:66::i;:::-;40258:1;40242:18;;:4;:18;;;40238:160;;;40282:9;40277:110;40301:3;:10;40297:1;:14;40277:110;;;40361:7;40369:1;40361:10;;;;;;;;:::i;:::-;;;;;;;;40337:12;:20;40350:3;40354:1;40350:6;;;;;;;;:::i;:::-;;;;;;;;40337:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;40313:3;;;;:::i;:::-;;;40277:110;;;;40238:160;40428:1;40414:16;;:2;:16;;;40410:434;;;40452:9;40447:386;40471:3;:10;40467:1;:14;40447:386;;;40507:10;40520:3;40524:1;40520:6;;;;;;;;:::i;:::-;;;;;;;;40507:19;;40545:14;40562:7;40570:1;40562:10;;;;;;;;:::i;:::-;;;;;;;;40545:27;;40591:14;40608:12;:16;40621:2;40608:16;;;;;;;;;;;;40591:33;;40661:6;40651;:16;;40643:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;40792:6;40783;:15;40764:12;:16;40777:2;40764:16;;;;;;;;;;;:34;;;;40488:345;;;40483:3;;;;:::i;:::-;;;40447:386;;;;40410:434;39920:931;;;;;;:::o;36766:220::-;;;;;;;:::o;37746:813::-;37986:15;:2;:13;;;:15::i;:::-;37982:570;;;38039:2;38022:43;;;38066:8;38076:4;38082:3;38087:7;38096:4;38022:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38018:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;38414:6;38407:14;;;;;;;;;;;:::i;:::-;;;;;;;;38018:523;;;38463:62;;;;;;;;;;:::i;:::-;;;;;;;;38018:523;38195:48;;;38183:60;;;:8;:60;;;;38179:159;;38268:50;;;;;;;;;;:::i;:::-;;;;;;;;38179:159;38102:251;37982:570;37746:813;;;;;;:::o;38567:198::-;38633:16;38662:22;38701:1;38687:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38662:41;;38725:7;38714:5;38720:1;38714:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;38752:5;38745:12;;;38567:198;;;:::o;36994:744::-;37209:15;:2;:13;;;:15::i;:::-;37205:526;;;37262:2;37245:38;;;37284:8;37294:4;37300:2;37304:6;37312:4;37245:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37241:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37593:6;37586:14;;;;;;;;;;;:::i;:::-;;;;;;;;37241:479;;;37642:62;;;;;;;;;;:::i;:::-;;;;;;;;37241:479;37379:43;;;37367:55;;;:8;:55;;;;37363:154;;37447:50;;;;;;;;;;:::i;:::-;;;;;;;;37363:154;37318:214;37205:526;36994:744;;;;;;:::o;35590:221::-;;;;;;;:::o;4656:326::-;4716:4;4973:1;4951:7;:19;;;:23;4944:30;;4656:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:468::-;8043:6;8051;8100:2;8088:9;8079:7;8075:23;8071:32;8068:119;;;8106:79;;:::i;:::-;8068:119;8226:1;8251:53;8296:7;8287:6;8276:9;8272:22;8251:53;:::i;:::-;8241:63;;8197:117;8353:2;8379:50;8421:7;8412:6;8401:9;8397:22;8379:50;:::i;:::-;8369:60;;8324:115;7978:468;;;;;:::o;8452:474::-;8520:6;8528;8577:2;8565:9;8556:7;8552:23;8548:32;8545:119;;;8583:79;;:::i;:::-;8545:119;8703:1;8728:53;8773:7;8764:6;8753:9;8749:22;8728:53;:::i;:::-;8718:63;;8674:117;8830:2;8856:53;8901:7;8892:6;8881:9;8877:22;8856:53;:::i;:::-;8846:63;;8801:118;8452:474;;;;;:::o;8932:894::-;9050:6;9058;9107:2;9095:9;9086:7;9082:23;9078:32;9075:119;;;9113:79;;:::i;:::-;9075:119;9261:1;9250:9;9246:17;9233:31;9291:18;9283:6;9280:30;9277:117;;;9313:79;;:::i;:::-;9277:117;9418:78;9488:7;9479:6;9468:9;9464:22;9418:78;:::i;:::-;9408:88;;9204:302;9573:2;9562:9;9558:18;9545:32;9604:18;9596:6;9593:30;9590:117;;;9626:79;;:::i;:::-;9590:117;9731:78;9801:7;9792:6;9781:9;9777:22;9731:78;:::i;:::-;9721:88;;9516:303;8932:894;;;;;:::o;9832:327::-;9890:6;9939:2;9927:9;9918:7;9914:23;9910:32;9907:119;;;9945:79;;:::i;:::-;9907:119;10065:1;10090:52;10134:7;10125:6;10114:9;10110:22;10090:52;:::i;:::-;10080:62;;10036:116;9832:327;;;;:::o;10165:349::-;10234:6;10283:2;10271:9;10262:7;10258:23;10254:32;10251:119;;;10289:79;;:::i;:::-;10251:119;10409:1;10434:63;10489:7;10480:6;10469:9;10465:22;10434:63;:::i;:::-;10424:73;;10380:127;10165:349;;;;:::o;10520:509::-;10589:6;10638:2;10626:9;10617:7;10613:23;10609:32;10606:119;;;10644:79;;:::i;:::-;10606:119;10792:1;10781:9;10777:17;10764:31;10822:18;10814:6;10811:30;10808:117;;;10844:79;;:::i;:::-;10808:117;10949:63;11004:7;10995:6;10984:9;10980:22;10949:63;:::i;:::-;10939:73;;10735:287;10520:509;;;;:::o;11035:329::-;11094:6;11143:2;11131:9;11122:7;11118:23;11114:32;11111:119;;;11149:79;;:::i;:::-;11111:119;11269:1;11294:53;11339:7;11330:6;11319:9;11315:22;11294:53;:::i;:::-;11284:63;;11240:117;11035:329;;;;:::o;11370:765::-;11456:6;11464;11472;11480;11529:3;11517:9;11508:7;11504:23;11500:33;11497:120;;;11536:79;;:::i;:::-;11497:120;11656:1;11681:53;11726:7;11717:6;11706:9;11702:22;11681:53;:::i;:::-;11671:63;;11627:117;11783:2;11809:53;11854:7;11845:6;11834:9;11830:22;11809:53;:::i;:::-;11799:63;;11754:118;11911:2;11937:53;11982:7;11973:6;11962:9;11958:22;11937:53;:::i;:::-;11927:63;;11882:118;12039:2;12065:53;12110:7;12101:6;12090:9;12086:22;12065:53;:::i;:::-;12055:63;;12010:118;11370:765;;;;;;;:::o;12141:179::-;12210:10;12231:46;12273:3;12265:6;12231:46;:::i;:::-;12309:4;12304:3;12300:14;12286:28;;12141:179;;;;:::o;12326:118::-;12413:24;12431:5;12413:24;:::i;:::-;12408:3;12401:37;12326:118;;:::o;12480:732::-;12599:3;12628:54;12676:5;12628:54;:::i;:::-;12698:86;12777:6;12772:3;12698:86;:::i;:::-;12691:93;;12808:56;12858:5;12808:56;:::i;:::-;12887:7;12918:1;12903:284;12928:6;12925:1;12922:13;12903:284;;;13004:6;12998:13;13031:63;13090:3;13075:13;13031:63;:::i;:::-;13024:70;;13117:60;13170:6;13117:60;:::i;:::-;13107:70;;12963:224;12950:1;12947;12943:9;12938:14;;12903:284;;;12907:14;13203:3;13196:10;;12604:608;;;12480:732;;;;:::o;13218:109::-;13299:21;13314:5;13299:21;:::i;:::-;13294:3;13287:34;13218:109;;:::o;13333:360::-;13419:3;13447:38;13479:5;13447:38;:::i;:::-;13501:70;13564:6;13559:3;13501:70;:::i;:::-;13494:77;;13580:52;13625:6;13620:3;13613:4;13606:5;13602:16;13580:52;:::i;:::-;13657:29;13679:6;13657:29;:::i;:::-;13652:3;13648:39;13641:46;;13423:270;13333:360;;;;:::o;13699:364::-;13787:3;13815:39;13848:5;13815:39;:::i;:::-;13870:71;13934:6;13929:3;13870:71;:::i;:::-;13863:78;;13950:52;13995:6;13990:3;13983:4;13976:5;13972:16;13950:52;:::i;:::-;14027:29;14049:6;14027:29;:::i;:::-;14022:3;14018:39;14011:46;;13791:272;13699:364;;;;:::o;14069:366::-;14211:3;14232:67;14296:2;14291:3;14232:67;:::i;:::-;14225:74;;14308:93;14397:3;14308:93;:::i;:::-;14426:2;14421:3;14417:12;14410:19;;14069:366;;;:::o;14441:::-;14583:3;14604:67;14668:2;14663:3;14604:67;:::i;:::-;14597:74;;14680:93;14769:3;14680:93;:::i;:::-;14798:2;14793:3;14789:12;14782:19;;14441:366;;;:::o;14813:::-;14955:3;14976:67;15040:2;15035:3;14976:67;:::i;:::-;14969:74;;15052:93;15141:3;15052:93;:::i;:::-;15170:2;15165:3;15161:12;15154:19;;14813:366;;;:::o;15185:::-;15327:3;15348:67;15412:2;15407:3;15348:67;:::i;:::-;15341:74;;15424:93;15513:3;15424:93;:::i;:::-;15542:2;15537:3;15533:12;15526:19;;15185:366;;;:::o;15557:::-;15699:3;15720:67;15784:2;15779:3;15720:67;:::i;:::-;15713:74;;15796:93;15885:3;15796:93;:::i;:::-;15914:2;15909:3;15905:12;15898:19;;15557:366;;;:::o;15929:::-;16071:3;16092:67;16156:2;16151:3;16092:67;:::i;:::-;16085:74;;16168:93;16257:3;16168:93;:::i;:::-;16286:2;16281:3;16277:12;16270:19;;15929:366;;;:::o;16301:::-;16443:3;16464:67;16528:2;16523:3;16464:67;:::i;:::-;16457:74;;16540:93;16629:3;16540:93;:::i;:::-;16658:2;16653:3;16649:12;16642:19;;16301:366;;;:::o;16673:::-;16815:3;16836:67;16900:2;16895:3;16836:67;:::i;:::-;16829:74;;16912:93;17001:3;16912:93;:::i;:::-;17030:2;17025:3;17021:12;17014:19;;16673:366;;;:::o;17045:::-;17187:3;17208:67;17272:2;17267:3;17208:67;:::i;:::-;17201:74;;17284:93;17373:3;17284:93;:::i;:::-;17402:2;17397:3;17393:12;17386:19;;17045:366;;;:::o;17417:::-;17559:3;17580:67;17644:2;17639:3;17580:67;:::i;:::-;17573:74;;17656:93;17745:3;17656:93;:::i;:::-;17774:2;17769:3;17765:12;17758:19;;17417:366;;;:::o;17789:::-;17931:3;17952:67;18016:2;18011:3;17952:67;:::i;:::-;17945:74;;18028:93;18117:3;18028:93;:::i;:::-;18146:2;18141:3;18137:12;18130:19;;17789:366;;;:::o;18161:::-;18303:3;18324:67;18388:2;18383:3;18324:67;:::i;:::-;18317:74;;18400:93;18489:3;18400:93;:::i;:::-;18518:2;18513:3;18509:12;18502:19;;18161:366;;;:::o;18533:::-;18675:3;18696:67;18760:2;18755:3;18696:67;:::i;:::-;18689:74;;18772:93;18861:3;18772:93;:::i;:::-;18890:2;18885:3;18881:12;18874:19;;18533:366;;;:::o;18905:::-;19047:3;19068:67;19132:2;19127:3;19068:67;:::i;:::-;19061:74;;19144:93;19233:3;19144:93;:::i;:::-;19262:2;19257:3;19253:12;19246:19;;18905:366;;;:::o;19277:::-;19419:3;19440:67;19504:2;19499:3;19440:67;:::i;:::-;19433:74;;19516:93;19605:3;19516:93;:::i;:::-;19634:2;19629:3;19625:12;19618:19;;19277:366;;;:::o;19649:::-;19791:3;19812:67;19876:2;19871:3;19812:67;:::i;:::-;19805:74;;19888:93;19977:3;19888:93;:::i;:::-;20006:2;20001:3;19997:12;19990:19;;19649:366;;;:::o;20021:::-;20163:3;20184:67;20248:2;20243:3;20184:67;:::i;:::-;20177:74;;20260:93;20349:3;20260:93;:::i;:::-;20378:2;20373:3;20369:12;20362:19;;20021:366;;;:::o;20393:::-;20535:3;20556:67;20620:2;20615:3;20556:67;:::i;:::-;20549:74;;20632:93;20721:3;20632:93;:::i;:::-;20750:2;20745:3;20741:12;20734:19;;20393:366;;;:::o;20765:::-;20907:3;20928:67;20992:2;20987:3;20928:67;:::i;:::-;20921:74;;21004:93;21093:3;21004:93;:::i;:::-;21122:2;21117:3;21113:12;21106:19;;20765:366;;;:::o;21137:::-;21279:3;21300:67;21364:2;21359:3;21300:67;:::i;:::-;21293:74;;21376:93;21465:3;21376:93;:::i;:::-;21494:2;21489:3;21485:12;21478:19;;21137:366;;;:::o;21509:::-;21651:3;21672:67;21736:2;21731:3;21672:67;:::i;:::-;21665:74;;21748:93;21837:3;21748:93;:::i;:::-;21866:2;21861:3;21857:12;21850:19;;21509:366;;;:::o;21881:108::-;21958:24;21976:5;21958:24;:::i;:::-;21953:3;21946:37;21881:108;;:::o;21995:118::-;22082:24;22100:5;22082:24;:::i;:::-;22077:3;22070:37;21995:118;;:::o;22119:222::-;22212:4;22250:2;22239:9;22235:18;22227:26;;22263:71;22331:1;22320:9;22316:17;22307:6;22263:71;:::i;:::-;22119:222;;;;:::o;22347:1053::-;22670:4;22708:3;22697:9;22693:19;22685:27;;22722:71;22790:1;22779:9;22775:17;22766:6;22722:71;:::i;:::-;22803:72;22871:2;22860:9;22856:18;22847:6;22803:72;:::i;:::-;22922:9;22916:4;22912:20;22907:2;22896:9;22892:18;22885:48;22950:108;23053:4;23044:6;22950:108;:::i;:::-;22942:116;;23105:9;23099:4;23095:20;23090:2;23079:9;23075:18;23068:48;23133:108;23236:4;23227:6;23133:108;:::i;:::-;23125:116;;23289:9;23283:4;23279:20;23273:3;23262:9;23258:19;23251:49;23317:76;23388:4;23379:6;23317:76;:::i;:::-;23309:84;;22347:1053;;;;;;;;:::o;23406:751::-;23629:4;23667:3;23656:9;23652:19;23644:27;;23681:71;23749:1;23738:9;23734:17;23725:6;23681:71;:::i;:::-;23762:72;23830:2;23819:9;23815:18;23806:6;23762:72;:::i;:::-;23844;23912:2;23901:9;23897:18;23888:6;23844:72;:::i;:::-;23926;23994:2;23983:9;23979:18;23970:6;23926:72;:::i;:::-;24046:9;24040:4;24036:20;24030:3;24019:9;24015:19;24008:49;24074:76;24145:4;24136:6;24074:76;:::i;:::-;24066:84;;23406:751;;;;;;;;:::o;24163:373::-;24306:4;24344:2;24333:9;24329:18;24321:26;;24393:9;24387:4;24383:20;24379:1;24368:9;24364:17;24357:47;24421:108;24524:4;24515:6;24421:108;:::i;:::-;24413:116;;24163:373;;;;:::o;24542:634::-;24763:4;24801:2;24790:9;24786:18;24778:26;;24850:9;24844:4;24840:20;24836:1;24825:9;24821:17;24814:47;24878:108;24981:4;24972:6;24878:108;:::i;:::-;24870:116;;25033:9;25027:4;25023:20;25018:2;25007:9;25003:18;24996:48;25061:108;25164:4;25155:6;25061:108;:::i;:::-;25053:116;;24542:634;;;;;:::o;25182:210::-;25269:4;25307:2;25296:9;25292:18;25284:26;;25320:65;25382:1;25371:9;25367:17;25358:6;25320:65;:::i;:::-;25182:210;;;;:::o;25398:313::-;25511:4;25549:2;25538:9;25534:18;25526:26;;25598:9;25592:4;25588:20;25584:1;25573:9;25569:17;25562:47;25626:78;25699:4;25690:6;25626:78;:::i;:::-;25618:86;;25398:313;;;;:::o;25717:419::-;25883:4;25921:2;25910:9;25906:18;25898:26;;25970:9;25964:4;25960:20;25956:1;25945:9;25941:17;25934:47;25998:131;26124:4;25998:131;:::i;:::-;25990:139;;25717:419;;;:::o;26142:::-;26308:4;26346:2;26335:9;26331:18;26323:26;;26395:9;26389:4;26385:20;26381:1;26370:9;26366:17;26359:47;26423:131;26549:4;26423:131;:::i;:::-;26415:139;;26142:419;;;:::o;26567:::-;26733:4;26771:2;26760:9;26756:18;26748:26;;26820:9;26814:4;26810:20;26806:1;26795:9;26791:17;26784:47;26848:131;26974:4;26848:131;:::i;:::-;26840:139;;26567:419;;;:::o;26992:::-;27158:4;27196:2;27185:9;27181:18;27173:26;;27245:9;27239:4;27235:20;27231:1;27220:9;27216:17;27209:47;27273:131;27399:4;27273:131;:::i;:::-;27265:139;;26992:419;;;:::o;27417:::-;27583:4;27621:2;27610:9;27606:18;27598:26;;27670:9;27664:4;27660:20;27656:1;27645:9;27641:17;27634:47;27698:131;27824:4;27698:131;:::i;:::-;27690:139;;27417:419;;;:::o;27842:::-;28008:4;28046:2;28035:9;28031:18;28023:26;;28095:9;28089:4;28085:20;28081:1;28070:9;28066:17;28059:47;28123:131;28249:4;28123:131;:::i;:::-;28115:139;;27842:419;;;:::o;28267:::-;28433:4;28471:2;28460:9;28456:18;28448:26;;28520:9;28514:4;28510:20;28506:1;28495:9;28491:17;28484:47;28548:131;28674:4;28548:131;:::i;:::-;28540:139;;28267:419;;;:::o;28692:::-;28858:4;28896:2;28885:9;28881:18;28873:26;;28945:9;28939:4;28935:20;28931:1;28920:9;28916:17;28909:47;28973:131;29099:4;28973:131;:::i;:::-;28965:139;;28692:419;;;:::o;29117:::-;29283:4;29321:2;29310:9;29306:18;29298:26;;29370:9;29364:4;29360:20;29356:1;29345:9;29341:17;29334:47;29398:131;29524:4;29398:131;:::i;:::-;29390:139;;29117:419;;;:::o;29542:::-;29708:4;29746:2;29735:9;29731:18;29723:26;;29795:9;29789:4;29785:20;29781:1;29770:9;29766:17;29759:47;29823:131;29949:4;29823:131;:::i;:::-;29815:139;;29542:419;;;:::o;29967:::-;30133:4;30171:2;30160:9;30156:18;30148:26;;30220:9;30214:4;30210:20;30206:1;30195:9;30191:17;30184:47;30248:131;30374:4;30248:131;:::i;:::-;30240:139;;29967:419;;;:::o;30392:::-;30558:4;30596:2;30585:9;30581:18;30573:26;;30645:9;30639:4;30635:20;30631:1;30620:9;30616:17;30609:47;30673:131;30799:4;30673:131;:::i;:::-;30665:139;;30392:419;;;:::o;30817:::-;30983:4;31021:2;31010:9;31006:18;30998:26;;31070:9;31064:4;31060:20;31056:1;31045:9;31041:17;31034:47;31098:131;31224:4;31098:131;:::i;:::-;31090:139;;30817:419;;;:::o;31242:::-;31408:4;31446:2;31435:9;31431:18;31423:26;;31495:9;31489:4;31485:20;31481:1;31470:9;31466:17;31459:47;31523:131;31649:4;31523:131;:::i;:::-;31515:139;;31242:419;;;:::o;31667:::-;31833:4;31871:2;31860:9;31856:18;31848:26;;31920:9;31914:4;31910:20;31906:1;31895:9;31891:17;31884:47;31948:131;32074:4;31948:131;:::i;:::-;31940:139;;31667:419;;;:::o;32092:::-;32258:4;32296:2;32285:9;32281:18;32273:26;;32345:9;32339:4;32335:20;32331:1;32320:9;32316:17;32309:47;32373:131;32499:4;32373:131;:::i;:::-;32365:139;;32092:419;;;:::o;32517:::-;32683:4;32721:2;32710:9;32706:18;32698:26;;32770:9;32764:4;32760:20;32756:1;32745:9;32741:17;32734:47;32798:131;32924:4;32798:131;:::i;:::-;32790:139;;32517:419;;;:::o;32942:::-;33108:4;33146:2;33135:9;33131:18;33123:26;;33195:9;33189:4;33185:20;33181:1;33170:9;33166:17;33159:47;33223:131;33349:4;33223:131;:::i;:::-;33215:139;;32942:419;;;:::o;33367:::-;33533:4;33571:2;33560:9;33556:18;33548:26;;33620:9;33614:4;33610:20;33606:1;33595:9;33591:17;33584:47;33648:131;33774:4;33648:131;:::i;:::-;33640:139;;33367:419;;;:::o;33792:::-;33958:4;33996:2;33985:9;33981:18;33973:26;;34045:9;34039:4;34035:20;34031:1;34020:9;34016:17;34009:47;34073:131;34199:4;34073:131;:::i;:::-;34065:139;;33792:419;;;:::o;34217:::-;34383:4;34421:2;34410:9;34406:18;34398:26;;34470:9;34464:4;34460:20;34456:1;34445:9;34441:17;34434:47;34498:131;34624:4;34498:131;:::i;:::-;34490:139;;34217:419;;;:::o;34642:222::-;34735:4;34773:2;34762:9;34758:18;34750:26;;34786:71;34854:1;34843:9;34839:17;34830:6;34786:71;:::i;:::-;34642:222;;;;:::o;34870:332::-;34991:4;35029:2;35018:9;35014:18;35006:26;;35042:71;35110:1;35099:9;35095:17;35086:6;35042:71;:::i;:::-;35123:72;35191:2;35180:9;35176:18;35167:6;35123:72;:::i;:::-;34870:332;;;;;:::o;35208:129::-;35242:6;35269:20;;:::i;:::-;35259:30;;35298:33;35326:4;35318:6;35298:33;:::i;:::-;35208:129;;;:::o;35343:75::-;35376:6;35409:2;35403:9;35393:19;;35343:75;:::o;35424:311::-;35501:4;35591:18;35583:6;35580:30;35577:56;;;35613:18;;:::i;:::-;35577:56;35663:4;35655:6;35651:17;35643:25;;35723:4;35717;35713:15;35705:23;;35424:311;;;:::o;35741:::-;35818:4;35908:18;35900:6;35897:30;35894:56;;;35930:18;;:::i;:::-;35894:56;35980:4;35972:6;35968:17;35960:25;;36040:4;36034;36030:15;36022:23;;35741:311;;;:::o;36058:307::-;36119:4;36209:18;36201:6;36198:30;36195:56;;;36231:18;;:::i;:::-;36195:56;36269:29;36291:6;36269:29;:::i;:::-;36261:37;;36353:4;36347;36343:15;36335:23;;36058:307;;;:::o;36371:308::-;36433:4;36523:18;36515:6;36512:30;36509:56;;;36545:18;;:::i;:::-;36509:56;36583:29;36605:6;36583:29;:::i;:::-;36575:37;;36667:4;36661;36657:15;36649:23;;36371:308;;;:::o;36685:132::-;36752:4;36775:3;36767:11;;36805:4;36800:3;36796:14;36788:22;;36685:132;;;:::o;36823:114::-;36890:6;36924:5;36918:12;36908:22;;36823:114;;;:::o;36943:98::-;36994:6;37028:5;37022:12;37012:22;;36943:98;;;:::o;37047:99::-;37099:6;37133:5;37127:12;37117:22;;37047:99;;;:::o;37152:113::-;37222:4;37254;37249:3;37245:14;37237:22;;37152:113;;;:::o;37271:184::-;37370:11;37404:6;37399:3;37392:19;37444:4;37439:3;37435:14;37420:29;;37271:184;;;;:::o;37461:168::-;37544:11;37578:6;37573:3;37566:19;37618:4;37613:3;37609:14;37594:29;;37461:168;;;;:::o;37635:169::-;37719:11;37753:6;37748:3;37741:19;37793:4;37788:3;37784:14;37769:29;;37635:169;;;;:::o;37810:305::-;37850:3;37869:20;37887:1;37869:20;:::i;:::-;37864:25;;37903:20;37921:1;37903:20;:::i;:::-;37898:25;;38057:1;37989:66;37985:74;37982:1;37979:81;37976:107;;;38063:18;;:::i;:::-;37976:107;38107:1;38104;38100:9;38093:16;;37810:305;;;;:::o;38121:348::-;38161:7;38184:20;38202:1;38184:20;:::i;:::-;38179:25;;38218:20;38236:1;38218:20;:::i;:::-;38213:25;;38406:1;38338:66;38334:74;38331:1;38328:81;38323:1;38316:9;38309:17;38305:105;38302:131;;;38413:18;;:::i;:::-;38302:131;38461:1;38458;38454:9;38443:20;;38121:348;;;;:::o;38475:191::-;38515:4;38535:20;38553:1;38535:20;:::i;:::-;38530:25;;38569:20;38587:1;38569:20;:::i;:::-;38564:25;;38608:1;38605;38602:8;38599:34;;;38613:18;;:::i;:::-;38599:34;38658:1;38655;38651:9;38643:17;;38475:191;;;;:::o;38672:96::-;38709:7;38738:24;38756:5;38738:24;:::i;:::-;38727:35;;38672:96;;;:::o;38774:90::-;38808:7;38851:5;38844:13;38837:21;38826:32;;38774:90;;;:::o;38870:149::-;38906:7;38946:66;38939:5;38935:78;38924:89;;38870:149;;;:::o;39025:126::-;39062:7;39102:42;39095:5;39091:54;39080:65;;39025:126;;;:::o;39157:77::-;39194:7;39223:5;39212:16;;39157:77;;;:::o;39240:154::-;39324:6;39319:3;39314;39301:30;39386:1;39377:6;39372:3;39368:16;39361:27;39240:154;;;:::o;39400:307::-;39468:1;39478:113;39492:6;39489:1;39486:13;39478:113;;;39577:1;39572:3;39568:11;39562:18;39558:1;39553:3;39549:11;39542:39;39514:2;39511:1;39507:10;39502:15;;39478:113;;;39609:6;39606:1;39603:13;39600:101;;;39689:1;39680:6;39675:3;39671:16;39664:27;39600:101;39449:258;39400:307;;;:::o;39713:320::-;39757:6;39794:1;39788:4;39784:12;39774:22;;39841:1;39835:4;39831:12;39862:18;39852:81;;39918:4;39910:6;39906:17;39896:27;;39852:81;39980:2;39972:6;39969:14;39949:18;39946:38;39943:84;;;39999:18;;:::i;:::-;39943:84;39764:269;39713:320;;;:::o;40039:281::-;40122:27;40144:4;40122:27;:::i;:::-;40114:6;40110:40;40252:6;40240:10;40237:22;40216:18;40204:10;40201:34;40198:62;40195:88;;;40263:18;;:::i;:::-;40195:88;40303:10;40299:2;40292:22;40082:238;40039:281;;:::o;40326:233::-;40365:3;40388:24;40406:5;40388:24;:::i;:::-;40379:33;;40434:66;40427:5;40424:77;40421:103;;;40504:18;;:::i;:::-;40421:103;40551:1;40544:5;40540:13;40533:20;;40326:233;;;:::o;40565:180::-;40613:77;40610:1;40603:88;40710:4;40707:1;40700:15;40734:4;40731:1;40724:15;40751:180;40799:77;40796:1;40789:88;40896:4;40893:1;40886:15;40920:4;40917:1;40910:15;40937:180;40985:77;40982:1;40975:88;41082:4;41079:1;41072:15;41106:4;41103:1;41096:15;41123:180;41171:77;41168:1;41161:88;41268:4;41265:1;41258:15;41292:4;41289:1;41282:15;41309:183;41344:3;41382:1;41364:16;41361:23;41358:128;;;41420:1;41417;41414;41399:23;41442:34;41473:1;41467:8;41442:34;:::i;:::-;41435:41;;41358:128;41309:183;:::o;41498:117::-;41607:1;41604;41597:12;41621:117;41730:1;41727;41720:12;41744:117;41853:1;41850;41843:12;41867:117;41976:1;41973;41966:12;41990:117;42099:1;42096;42089:12;42113:102;42154:6;42205:2;42201:7;42196:2;42189:5;42185:14;42181:28;42171:38;;42113:102;;;:::o;42221:106::-;42265:8;42314:5;42309:3;42305:15;42284:36;;42221:106;;;:::o;42333:239::-;42473:34;42469:1;42461:6;42457:14;42450:58;42542:22;42537:2;42529:6;42525:15;42518:47;42333:239;:::o;42578:227::-;42718:34;42714:1;42706:6;42702:14;42695:58;42787:10;42782:2;42774:6;42770:15;42763:35;42578:227;:::o;42811:246::-;42951:34;42947:1;42939:6;42935:14;42928:58;43020:29;43015:2;43007:6;43003:15;42996:54;42811:246;:::o;43063:223::-;43203:34;43199:1;43191:6;43187:14;43180:58;43272:6;43267:2;43259:6;43255:15;43248:31;43063:223;:::o;43292:230::-;43432:34;43428:1;43420:6;43416:14;43409:58;43501:13;43496:2;43488:6;43484:15;43477:38;43292:230;:::o;43528:225::-;43668:34;43664:1;43656:6;43652:14;43645:58;43737:8;43732:2;43724:6;43720:15;43713:33;43528:225;:::o;43759:228::-;43899:34;43895:1;43887:6;43883:14;43876:58;43968:11;43963:2;43955:6;43951:15;43944:36;43759:228;:::o;43993:177::-;44133:29;44129:1;44121:6;44117:14;44110:53;43993:177;:::o;44176:232::-;44316:34;44312:1;44304:6;44300:14;44293:58;44385:15;44380:2;44372:6;44368:15;44361:40;44176:232;:::o;44414:224::-;44554:34;44550:1;44542:6;44538:14;44531:58;44623:7;44618:2;44610:6;44606:15;44599:32;44414:224;:::o;44644:237::-;44784:34;44780:1;44772:6;44768:14;44761:58;44853:20;44848:2;44840:6;44836:15;44829:45;44644:237;:::o;44887:182::-;45027:34;45023:1;45015:6;45011:14;45004:58;44887:182;:::o;45075:229::-;45215:34;45211:1;45203:6;45199:14;45192:58;45284:12;45279:2;45271:6;45267:15;45260:37;45075:229;:::o;45310:182::-;45450:34;45446:1;45438:6;45434:14;45427:58;45310:182;:::o;45498:227::-;45638:34;45634:1;45626:6;45622:14;45615:58;45707:10;45702:2;45694:6;45690:15;45683:35;45498:227;:::o;45731:223::-;45871:34;45867:1;45859:6;45855:14;45848:58;45940:6;45935:2;45927:6;45923:15;45916:31;45731:223;:::o;45960:180::-;46100:32;46096:1;46088:6;46084:14;46077:56;45960:180;:::o;46146:228::-;46286:34;46282:1;46274:6;46270:14;46263:58;46355:11;46350:2;46342:6;46338:15;46331:36;46146:228;:::o;46380:::-;46520:34;46516:1;46508:6;46504:14;46497:58;46589:11;46584:2;46576:6;46572:15;46565:36;46380:228;:::o;46614:227::-;46754:34;46750:1;46742:6;46738:14;46731:58;46823:10;46818:2;46810:6;46806:15;46799:35;46614:227;:::o;46847:220::-;46987:34;46983:1;46975:6;46971:14;46964:58;47056:3;47051:2;47043:6;47039:15;47032:28;46847:220;:::o;47073:711::-;47112:3;47150:4;47132:16;47129:26;47126:39;;;47158:5;;47126:39;47187:20;;:::i;:::-;47262:1;47244:16;47240:24;47237:1;47231:4;47216:49;47295:4;47289:11;47394:16;47387:4;47379:6;47375:17;47372:39;47339:18;47331:6;47328:30;47312:113;47309:146;;;47440:5;;;;47309:146;47486:6;47480:4;47476:17;47522:3;47516:10;47549:18;47541:6;47538:30;47535:43;;;47571:5;;;;;;47535:43;47619:6;47612:4;47607:3;47603:14;47599:27;47678:1;47660:16;47656:24;47650:4;47646:35;47641:3;47638:44;47635:57;;;47685:5;;;;;;;47635:57;47702;47750:6;47744:4;47740:17;47732:6;47728:30;47722:4;47702:57;:::i;:::-;47775:3;47768:10;;47116:668;;;;;47073:711;;:::o;47790:122::-;47863:24;47881:5;47863:24;:::i;:::-;47856:5;47853:35;47843:63;;47902:1;47899;47892:12;47843:63;47790:122;:::o;47918:116::-;47988:21;48003:5;47988:21;:::i;:::-;47981:5;47978:32;47968:60;;48024:1;48021;48014:12;47968:60;47918:116;:::o;48040:120::-;48112:23;48129:5;48112:23;:::i;:::-;48105:5;48102:34;48092:62;;48150:1;48147;48140:12;48092:62;48040:120;:::o;48166:122::-;48239:24;48257:5;48239:24;:::i;:::-;48232:5;48229:35;48219:63;;48278:1;48275;48268:12;48219:63;48166:122;:::o

Swarm Source

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