ETH Price: $3,424.26 (-2.17%)
Gas: 5 Gwei

Token

Digit mfers (DM)
 

Overview

Max Total Supply

5,000 DM

Holders

363

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
mogumentary.eth
Balance
20 DM
0x4d6c155d634ecd4f78388fc0d3d5c29e8f3ceb5b
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:
Digit_mfers

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2022-03-01
 */

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Strings.sol

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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

// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;

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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

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

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

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

// File: @openzeppelin/contracts/utils/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: erc721a/contracts/ERC721A.sol

// Creator: Chiru Labs

pragma solidity ^0.8.4;

error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintedQueryForZeroAddress();
error BurnedQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerIndexOutOfBounds();
error OwnerQueryForNonexistentToken();
error TokenIndexOutOfBounds();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**128 - 1 (max value of uint128).
 */
contract ERC721A is
    Context,
    ERC165,
    IERC721,
    IERC721Metadata,
    IERC721Enumerable
{
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
    }

    // Compiler will pack the following
    // _currentIndex and _burnCounter into a single 256bit word.

    // The tokenId of the next token to be minted.
    uint128 internal _currentIndex;

    // The number of tokens burned.
    uint128 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

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

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex times
        unchecked {
            return _currentIndex - _burnCounter;
        }
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenByIndex(uint256 index)
        public
        view
        override
        returns (uint256)
    {
        uint256 numMintedSoFar = _currentIndex;
        uint256 tokenIdsIdx;

        // Counter overflow is impossible as the loop breaks when
        // uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (!ownership.burned) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }
        revert TokenIndexOutOfBounds();
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        override
        returns (uint256)
    {
        if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds();
        uint256 numMintedSoFar = _currentIndex;
        uint256 tokenIdsIdx;
        address currOwnershipAddr;

        // Counter overflow is impossible as the loop breaks when
        // uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (ownership.burned) {
                    continue;
                }
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }

        // Execution should never reach this point.
        revert();
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert MintedQueryForZeroAddress();
        return uint256(_addressData[owner].numberMinted);
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert BurnedQueryForZeroAddress();
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId)
        internal
        view
        returns (TokenOwnership memory)
    {
        uint256 curr = tokenId;

        unchecked {
            if (curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length != 0
                ? string(abi.encodePacked(baseURI, tokenId.toString()))
                : "";
    }

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId)
        public
        view
        override
        returns (address)
    {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        override
    {
        if (operator == _msgSender()) revert ApproveToCaller();

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

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (!_checkOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

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

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, "");
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
        // updatedIndex overflows if _currentIndex + quantity > 3.4e38 (2**128) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;

            for (uint256 i; i < quantity; i++) {
                emit Transfer(address(0), to, updatedIndex);
                if (
                    safe &&
                    !_checkOnERC721Received(address(0), to, updatedIndex, _data)
                ) {
                    revert TransferToNonERC721ReceiverImplementer();
                }
                updatedIndex++;
            }

            _currentIndex = uint128(updatedIndex);
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            isApprovedForAll(prevOwnership.addr, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**128.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            _ownerships[tokenId].addr = to;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership
                        .startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

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

        _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**128.
        unchecked {
            _addressData[prevOwnership.addr].balance -= 1;
            _addressData[prevOwnership.addr].numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            _ownerships[tokenId].addr = prevOwnership.addr;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);
            _ownerships[tokenId].burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership
                        .startTimestamp;
                }
            }
        }

        emit Transfer(prevOwnership.addr, address(0), tokenId);
        _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

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

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

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

// 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: contract.sol
interface IStaking {
    function mint(address _to, uint256 _amount) external;
}

pragma solidity ^0.8.4;

contract Digit_mfers is Ownable, ERC721A {
    using Strings for uint256;
    IStaking public StakingContract;
    string private _tokenBaseURI =
        "https://storageapi.fleek.co/b701e2b3-d1dc-4c52-9586-8d26ee95b05d-bucket/FMD/";
    uint256 public DM_MAX = 5000;
    uint256 public DM_PRICE_free = 0 ether;
    uint256 public DM_PRICE = 0.0069 ether;
    uint256 public DM_PER_MINT = 20;
    uint256 public tokenMintsCounter;
    bool public publicLive;
    bool public stakingLive;
    uint256 public earningRate = 0.0001157407406 ether;
    mapping(uint256 => uint256) public tokensLastClaimBlock;
    mapping(address => uint256[]) public balanceIds;

    constructor() ERC721A("Digit mfers", "DM") {}

    modifier callerIsUser() {
        require(tx.origin == msg.sender, "The caller is another contract");
        _;
    }

    function gift(address[] calldata receivers) external onlyOwner {
        require(tokenMintsCounter + receivers.length <= DM_MAX, "EXCEED_MAX");
        for (uint256 i = 0; i < receivers.length; i++) {
            tokensLastClaimBlock[tokenMintsCounter] = block.number;
            balanceIds[receivers[i]].push(tokenMintsCounter);
            tokenMintsCounter++;
            _safeMint(receivers[i], 1);
        }
    }

    function founderMint(uint256 tokenQuantity) external onlyOwner {
        require(tokenMintsCounter + tokenQuantity <= DM_MAX, "EXCEED_MAX");
        tokensLastClaimBlock[tokenMintsCounter] = block.number;
        balanceIds[msg.sender].push(tokenMintsCounter);
        tokenMintsCounter++;
        _safeMint(msg.sender, tokenQuantity);
    }

    function mint(uint256 tokenQuantity) external payable callerIsUser {
        require(publicLive, "MINT_CLOSED");
        require(tokenMintsCounter + tokenQuantity <= DM_MAX, "EXCEED_MAX");
        require(tokenQuantity <= DM_PER_MINT, "EXCEED_PER_MINT");
        require(
            (DM_PRICE * tokenQuantity <= msg.value &&
                tokenMintsCounter >= 1000) ||
                (DM_PRICE_free * tokenQuantity <= msg.value &&
                    tokenMintsCounter < 1000),
            "INSUFFICIENT_ETH"
        );
        for (uint256 index = 0; index < tokenQuantity; index++) {
            tokensLastClaimBlock[tokenMintsCounter] = block.number;
            balanceIds[msg.sender].push(tokenMintsCounter);
            tokenMintsCounter++;
        }
        _safeMint(msg.sender, tokenQuantity);
    }

    function withdraw() external onlyOwner {
        payable(0xa4F213f5e49D9a423Bb280024B577053b23B6974).transfer(
            address(this).balance / 20
        );
        payable(0x3445544E92EF4a2708000A08D20F14B24BA460F1).transfer(
            address(this).balance
        );
    }

    function togglePublicMintStatus() external onlyOwner {
        publicLive = !publicLive;
    }

    function toggleStakingStatus() external onlyOwner {
        stakingLive = !stakingLive;
    }

    function setPrice(uint256 newPrice) external onlyOwner {
        DM_PRICE = newPrice;
    }

    function setPrice_500(uint256 newPrice) external onlyOwner {
        DM_PRICE_free = newPrice;
    }

    function setMax(uint256 newCount) external onlyOwner {
        DM_MAX = newCount;
    }

    function _baseURI() internal view virtual override returns (string memory) {
        return _tokenBaseURI;
    }

    function setBaseURI(string calldata baseURI) external onlyOwner {
        _tokenBaseURI = baseURI;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721A)
        returns (string memory)
    {
        require(_exists(tokenId), "Cannot query non-existent token");

        return string(abi.encodePacked(_tokenBaseURI, tokenId.toString()));
    }

    function claimStakingRewards() external {
        require(stakingLive, "STAKING_CLOSED");
        uint256 totalRewards = 0;

        for (
            uint256 index = 0;
            index < balanceIds[msg.sender].length;
            index++
        ) {
            require(
                tokensLastClaimBlock[balanceIds[msg.sender][index]] > 0,
                "WRONG_BLOCK_NUMBER"
            );
            totalRewards =
                totalRewards +
                earningRate *
                (block.number -
                    (tokensLastClaimBlock[balanceIds[msg.sender][index]]));
            tokensLastClaimBlock[balanceIds[msg.sender][index]] = block.number;
        }

        StakingContract.mint(msg.sender, totalRewards);
    }

    function setEarningRate(uint256 rate) external onlyOwner {
        earningRate = rate;
    }

    function setStakingContract(address contractAddress) external onlyOwner {
        StakingContract = IStaking(contractAddress);
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public override {
        for (uint256 index = 0; index < balanceIds[from].length; index++) {
            if (balanceIds[from][index] == tokenId) {
                balanceIds[from][index] = balanceIds[from][
                    balanceIds[from].length - 1
                ];
                balanceIds[from].pop();
            }
        }
        balanceIds[to].push(tokenId);
        tokensLastClaimBlock[tokenId] = block.number;
        ERC721A.transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) public override {
        for (uint256 index = 0; index < balanceIds[from].length; index++) {
            if (balanceIds[from][index] == tokenId) {
                balanceIds[from][index] = balanceIds[from][
                    balanceIds[from].length - 1
                ];
                balanceIds[from].pop();
            }
        }
        balanceIds[to].push(tokenId);
        tokensLastClaimBlock[tokenId] = block.number;
        ERC721A.safeTransferFrom(from, to, tokenId, data);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DM_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DM_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DM_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DM_PRICE_free","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"StakingContract","outputs":[{"internalType":"contract IStaking","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"balanceIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimStakingRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earningRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"founderMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"receivers","type":"address[]"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"name":"setEarningRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCount","type":"uint256"}],"name":"setMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice_500","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"setStakingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePublicMintStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleStakingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenMintsCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensLastClaimBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040518060800160405280604c815260200162005217604c91396009908051906020019062000035929190620001fb565b50611388600a556000600b556618838370f34000600c556014600d55656943fdbac0c06010553480156200006857600080fd5b506040518060400160405280600b81526020017f4469676974206d666572730000000000000000000000000000000000000000008152506040518060400160405280600281526020017f444d000000000000000000000000000000000000000000000000000000000000815250620000f5620000e96200012f60201b60201c565b6200013760201b60201c565b81600290805190602001906200010d929190620001fb565b50806003908051906020019062000126929190620001fb565b50505062000310565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020990620002ab565b90600052602060002090601f0160209004810192826200022d576000855562000279565b82601f106200024857805160ff191683800117855562000279565b8280016001018555821562000279579182015b82811115620002785782518255916020019190600101906200025b565b5b5090506200028891906200028c565b5090565b5b80821115620002a75760008160009055506001016200028d565b5090565b60006002820490506001821680620002c457607f821691505b60208210811415620002db57620002da620002e1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614ef780620003206000396000f3fe6080604052600436106102605760003560e01c806380bfb9d311610144578063ad41e0e1116100b6578063c87b56dd1161007a578063c87b56dd146108a8578063d92656a7146108e5578063e985e9c514610910578063ed76b0b41461094d578063f2fde38b14610978578063f42202e8146109a157610267565b8063ad41e0e1146107e9578063b7f751d814610814578063b88d4fde1461083f578063c5d62b1814610868578063c720c6641461087f57610267565b806395d89b411161010857806395d89b411461070e57806397f5ec67146107395780639dd373b914610750578063a0712d6814610779578063a22cb46514610795578063a9a47654146107be57610267565b806380bfb9d314610627578063888687be1461065257806389dab1821461068f5780638da5cb5b146106ba57806391b7f5ed146106e557610267565b80633ccfd60b116101dd5780636352211e116101a15780636352211e1461052b5780636b69e05b146105685780636efabb011461057f57806370a08231146105a8578063715018a6146105e55780637979fd24146105fc57610267565b80633ccfd60b1461044857806342842e0e1461045f578063446339f1146104885780634f6ccce7146104c557806355f804b31461050257610267565b8063163e1e6111610224578063163e1e611461036557806318160ddd1461038e5780631fe9eabc146103b957806323b872dd146103e25780632f745c591461040b57610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d457806308f09a8914610311578063095ea7b31461033c57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610293600480360381019061028e91906141d9565b6109ca565b6040516102a0919061461d565b60405180910390f35b3480156102b557600080fd5b506102be610b14565b6040516102cb9190614653565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190614280565b610ba6565b604051610308919061458d565b60405180910390f35b34801561031d57600080fd5b50610326610c22565b60405161033391906147b5565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e919061414c565b610c28565b005b34801561037157600080fd5b5061038c6004803603810190610387919061418c565b610d33565b005b34801561039a57600080fd5b506103a3610f1d565b6040516103b091906147b5565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190614280565b610f75565b005b3480156103ee57600080fd5b5061040960048036038101906104049190614036565b610ffb565b005b34801561041757600080fd5b50610432600480360381019061042d919061414c565b6112bc565b60405161043f91906147b5565b60405180910390f35b34801561045457600080fd5b5061045d6114c4565b005b34801561046b57600080fd5b5061048660048036038101906104819190614036565b611604565b005b34801561049457600080fd5b506104af60048036038101906104aa9190614280565b611624565b6040516104bc91906147b5565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190614280565b61163c565b6040516104f991906147b5565b60405180910390f35b34801561050e57600080fd5b5061052960048036038101906105249190614233565b6117af565b005b34801561053757600080fd5b50610552600480360381019061054d9190614280565b611841565b60405161055f919061458d565b60405180910390f35b34801561057457600080fd5b5061057d611857565b005b34801561058b57600080fd5b506105a660048036038101906105a19190614280565b611b52565b005b3480156105b457600080fd5b506105cf60048036038101906105ca9190613fc9565b611bd8565b6040516105dc91906147b5565b60405180910390f35b3480156105f157600080fd5b506105fa611ca8565b005b34801561060857600080fd5b50610611611d30565b60405161061e91906147b5565b60405180910390f35b34801561063357600080fd5b5061063c611d36565b60405161064991906147b5565b60405180910390f35b34801561065e57600080fd5b506106796004803603810190610674919061414c565b611d3c565b60405161068691906147b5565b60405180910390f35b34801561069b57600080fd5b506106a4611d6d565b6040516106b191906147b5565b60405180910390f35b3480156106c657600080fd5b506106cf611d73565b6040516106dc919061458d565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190614280565b611d9c565b005b34801561071a57600080fd5b50610723611e22565b6040516107309190614653565b60405180910390f35b34801561074557600080fd5b5061074e611eb4565b005b34801561075c57600080fd5b5061077760048036038101906107729190613fc9565b611f5c565b005b610793600480360381019061078e9190614280565b61201c565b005b3480156107a157600080fd5b506107bc60048036038101906107b7919061410c565b6122bd565b005b3480156107ca57600080fd5b506107d3612435565b6040516107e09190614638565b60405180910390f35b3480156107f557600080fd5b506107fe61245b565b60405161080b91906147b5565b60405180910390f35b34801561082057600080fd5b50610829612461565b604051610836919061461d565b60405180910390f35b34801561084b57600080fd5b5061086660048036038101906108619190614089565b612474565b005b34801561087457600080fd5b5061087d612737565b005b34801561088b57600080fd5b506108a660048036038101906108a19190614280565b6127df565b005b3480156108b457600080fd5b506108cf60048036038101906108ca9190614280565b612865565b6040516108dc9190614653565b60405180910390f35b3480156108f157600080fd5b506108fa6128e1565b604051610907919061461d565b60405180910390f35b34801561091c57600080fd5b5061093760048036038101906109329190613ff6565b6128f4565b604051610944919061461d565b60405180910390f35b34801561095957600080fd5b50610962612988565b60405161096f91906147b5565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a9190613fc9565b61298e565b005b3480156109ad57600080fd5b506109c860048036038101906109c39190614280565b612a86565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610afd57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b0d5750610b0c82612bfb565b5b9050919050565b606060028054610b2390614a7f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4f90614a7f565b8015610b9c5780601f10610b7157610100808354040283529160200191610b9c565b820191906000526020600020905b815481529060010190602001808311610b7f57829003601f168201915b5050505050905090565b6000610bb182612c65565b610be7576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60105481565b6000610c3382611841565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c9b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cba612cce565b73ffffffffffffffffffffffffffffffffffffffff1614158015610cec5750610cea81610ce5612cce565b6128f4565b155b15610d23576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d2e838383612cd6565b505050565b610d3b612cce565b73ffffffffffffffffffffffffffffffffffffffff16610d59611d73565b73ffffffffffffffffffffffffffffffffffffffff1614610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690614735565b60405180910390fd5b600a5482829050600e54610dc3919061487e565b1115610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90614775565b60405180910390fd5b60005b82829050811015610f18574360116000600e5481526020019081526020016000208190555060126000848484818110610e4357610e42614c18565b5b9050602002016020810190610e589190613fc9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600e549080600181540180825580915050600190039060005260206000200160009091909190915055600e6000815480929190610ece90614ae2565b9190505550610f05838383818110610ee957610ee8614c18565b5b9050602002016020810190610efe9190613fc9565b6001612d88565b8080610f1090614ae2565b915050610e07565b505050565b6000600160109054906101000a90046fffffffffffffffffffffffffffffffff16600160009054906101000a90046fffffffffffffffffffffffffffffffff16036fffffffffffffffffffffffffffffffff16905090565b610f7d612cce565b73ffffffffffffffffffffffffffffffffffffffff16610f9b611d73565b73ffffffffffffffffffffffffffffffffffffffff1614610ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe890614735565b60405180910390fd5b80600a8190555050565b60005b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561122d5781601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061109a57611099614c18565b5b9060005260206000200154141561121a57601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050611139919061495f565b8154811061114a57611149614c18565b5b9060005260206000200154601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106111a6576111a5614c18565b5b9060005260206000200181905550601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061120357611202614be9565b5b600190038181906000526020600020016000905590555b808061122590614ae2565b915050610ffe565b50601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150554360116000838152602001908152602001600020819055506112b7838383612da6565b505050565b60006112c783611bd8565b82106112ff576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008060005b838110156114b8576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001511561141757506114ab565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461145757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114a957868414156114a05781955050505050506114be565b83806001019450505b505b808060010191505061133a565b50600080fd5b92915050565b6114cc612cce565b73ffffffffffffffffffffffffffffffffffffffff166114ea611d73565b73ffffffffffffffffffffffffffffffffffffffff1614611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790614735565b60405180910390fd5b73a4f213f5e49d9a423bb280024b577053b23b697473ffffffffffffffffffffffffffffffffffffffff166108fc60144761157b91906148d4565b9081150290604051600060405180830381858888f193505050501580156115a6573d6000803e3d6000fd5b50733445544e92ef4a2708000a08d20f14b24ba460f173ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611601573d6000803e3d6000fd5b50565b61161f83838360405180602001604052806000815250612474565b505050565b60116020528060005260406000206000915090505481565b600080600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1690506000805b82811015611777576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611769578583141561176057819450505050506117aa565b82806001019350505b508080600101915050611676565b506040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6117b7612cce565b73ffffffffffffffffffffffffffffffffffffffff166117d5611d73565b73ffffffffffffffffffffffffffffffffffffffff161461182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290614735565b60405180910390fd5b81816009919061183c929190613d5e565b505050565b600061184c82612db6565b600001519050919050565b600f60019054906101000a900460ff166118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d906146f5565b60405180910390fd5b6000805b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015611abf57600060116000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020848154811061194b5761194a614c18565b5b9060005260206000200154815260200190815260200160002054116119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c906146b5565b60405180910390fd5b60116000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106119fa576119f9614c18565b5b906000526020600020015481526020019081526020016000205443611a1f919061495f565b601054611a2c9190614905565b82611a37919061487e565b91504360116000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110611a8f57611a8e614c18565b5b90600052602060002001548152602001908152602001600020819055508080611ab790614ae2565b9150506118aa565b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b8152600401611b1d9291906145f4565b600060405180830381600087803b158015611b3757600080fd5b505af1158015611b4b573d6000803e3d6000fd5b5050505050565b611b5a612cce565b73ffffffffffffffffffffffffffffffffffffffff16611b78611d73565b73ffffffffffffffffffffffffffffffffffffffff1614611bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc590614735565b60405180910390fd5b8060108190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c40576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611cb0612cce565b73ffffffffffffffffffffffffffffffffffffffff16611cce611d73565b73ffffffffffffffffffffffffffffffffffffffff1614611d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1b90614735565b60405180910390fd5b611d2e6000613060565b565b600a5481565b600b5481565b60126020528160005260406000208181548110611d5857600080fd5b90600052602060002001600091509150505481565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611da4612cce565b73ffffffffffffffffffffffffffffffffffffffff16611dc2611d73565b73ffffffffffffffffffffffffffffffffffffffff1614611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90614735565b60405180910390fd5b80600c8190555050565b606060038054611e3190614a7f565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5d90614a7f565b8015611eaa5780601f10611e7f57610100808354040283529160200191611eaa565b820191906000526020600020905b815481529060010190602001808311611e8d57829003601f168201915b5050505050905090565b611ebc612cce565b73ffffffffffffffffffffffffffffffffffffffff16611eda611d73565b73ffffffffffffffffffffffffffffffffffffffff1614611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790614735565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b611f64612cce565b73ffffffffffffffffffffffffffffffffffffffff16611f82611d73565b73ffffffffffffffffffffffffffffffffffffffff1614611fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcf90614735565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461208a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612081906146d5565b60405180910390fd5b600f60009054906101000a900460ff166120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d090614695565b60405180910390fd5b600a5481600e546120ea919061487e565b111561212b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212290614775565b60405180910390fd5b600d54811115612170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216790614715565b60405180910390fd5b3481600c5461217f9190614905565b1115801561219157506103e8600e5410155b806121b857503481600b546121a69190614905565b111580156121b757506103e8600e54105b5b6121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee90614795565b60405180910390fd5b60005b818110156122af574360116000600e54815260200190815260200160002081905550601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600e549080600181540180825580915050600190039060005260206000200160009091909190915055600e600081548092919061229790614ae2565b919050555080806122a790614ae2565b9150506121fa565b506122ba3382612d88565b50565b6122c5612cce565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561232a576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000612337612cce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166123e4612cce565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612429919061461d565b60405180910390a35050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b600f60009054906101000a900460ff1681565b60005b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156126a65782601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061251357612512614c18565b5b9060005260206000200154141561269357601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506125b2919061495f565b815481106125c3576125c2614c18565b5b9060005260206000200154601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061261f5761261e614c18565b5b9060005260206000200181905550601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061267c5761267b614be9565b5b600190038181906000526020600020016000905590555b808061269e90614ae2565b915050612477565b50601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082908060018154018082558091505060019003906000526020600020016000909190919091505543601160008481526020019081526020016000208190555061273184848484613124565b50505050565b61273f612cce565b73ffffffffffffffffffffffffffffffffffffffff1661275d611d73565b73ffffffffffffffffffffffffffffffffffffffff16146127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa90614735565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b6127e7612cce565b73ffffffffffffffffffffffffffffffffffffffff16612805611d73565b73ffffffffffffffffffffffffffffffffffffffff161461285b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285290614735565b60405180910390fd5b80600b8190555050565b606061287082612c65565b6128af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a690614755565b60405180910390fd5b60096128ba83613177565b6040516020016128cb929190614569565b6040516020818303038152906040529050919050565b600f60019054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c5481565b612996612cce565b73ffffffffffffffffffffffffffffffffffffffff166129b4611d73565b73ffffffffffffffffffffffffffffffffffffffff1614612a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0190614735565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7190614675565b60405180910390fd5b612a8381613060565b50565b612a8e612cce565b73ffffffffffffffffffffffffffffffffffffffff16612aac611d73565b73ffffffffffffffffffffffffffffffffffffffff1614612b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af990614735565b60405180910390fd5b600a5481600e54612b13919061487e565b1115612b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4b90614775565b60405180910390fd5b4360116000600e54815260200190815260200160002081905550601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600e549080600181540180825580915050600190039060005260206000200160009091909190915055600e6000815480929190612be990614ae2565b9190505550612bf83382612d88565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1682108015612cc7575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b612da28282604051806020016040528060008152506132d8565b5050565b612db18383836132ea565b505050565b612dbe613de4565b6000829050600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16811015613029576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161302757600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612f0b57809250505061305b565b5b60011561302657818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461302157809250505061305b565b612f0c565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61312f8484846132ea565b61313b84848484613809565b613171576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060008214156131bf576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132d3565b600082905060005b600082146131f15780806131da90614ae2565b915050600a826131ea91906148d4565b91506131c7565b60008167ffffffffffffffff81111561320d5761320c614c47565b5b6040519080825280601f01601f19166020018201604052801561323f5781602001600182028036833780820191505090505b5090505b600085146132cc57600182613258919061495f565b9150600a856132679190614b2b565b6030613273919061487e565b60f81b81838151811061328957613288614c18565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132c591906148d4565b9450613243565b8093505050505b919050565b6132e58383836001613997565b505050565b60006132f582612db6565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661331c612cce565b73ffffffffffffffffffffffffffffffffffffffff16148061334f575061334e8260000151613349612cce565b6128f4565b5b80613394575061335d612cce565b73ffffffffffffffffffffffffffffffffffffffff1661337c84610ba6565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806133cd576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614613436576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561349d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134aa8585856001613d2f565b6134ba6000848460000151612cd6565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561379957600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168110156137985782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46138028585856001613d35565b5050505050565b600061382a8473ffffffffffffffffffffffffffffffffffffffff16613d3b565b1561398a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613853612cce565b8786866040518563ffffffff1660e01b815260040161387594939291906145a8565b602060405180830381600087803b15801561388f57600080fd5b505af19250505080156138c057506040513d601f19601f820116820180604052508101906138bd9190614206565b60015b61393a573d80600081146138f0576040519150601f19603f3d011682016040523d82523d6000602084013e6138f5565b606091505b50600081511415613932576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061398f565b600190505b949350505050565b6000600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613a33576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613a6e576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613a7b6000868387613d2f565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015613ce057818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838015613c945750613c926000888488613809565b155b15613ccb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81806001019250508080600101915050613c19565b5080600160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050613d286000868387613d35565b5050505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613d6a90614a7f565b90600052602060002090601f016020900481019282613d8c5760008555613dd3565b82601f10613da557803560ff1916838001178555613dd3565b82800160010185558215613dd3579182015b82811115613dd2578235825591602001919060010190613db7565b5b509050613de09190613e27565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613e40576000816000905550600101613e28565b5090565b6000613e57613e52846147f5565b6147d0565b905082815260208101848484011115613e7357613e72614c85565b5b613e7e848285614a3d565b509392505050565b600081359050613e9581614e65565b92915050565b60008083601f840112613eb157613eb0614c7b565b5b8235905067ffffffffffffffff811115613ece57613ecd614c76565b5b602083019150836020820283011115613eea57613ee9614c80565b5b9250929050565b600081359050613f0081614e7c565b92915050565b600081359050613f1581614e93565b92915050565b600081519050613f2a81614e93565b92915050565b600082601f830112613f4557613f44614c7b565b5b8135613f55848260208601613e44565b91505092915050565b60008083601f840112613f7457613f73614c7b565b5b8235905067ffffffffffffffff811115613f9157613f90614c76565b5b602083019150836001820283011115613fad57613fac614c80565b5b9250929050565b600081359050613fc381614eaa565b92915050565b600060208284031215613fdf57613fde614c8f565b5b6000613fed84828501613e86565b91505092915050565b6000806040838503121561400d5761400c614c8f565b5b600061401b85828601613e86565b925050602061402c85828601613e86565b9150509250929050565b60008060006060848603121561404f5761404e614c8f565b5b600061405d86828701613e86565b935050602061406e86828701613e86565b925050604061407f86828701613fb4565b9150509250925092565b600080600080608085870312156140a3576140a2614c8f565b5b60006140b187828801613e86565b94505060206140c287828801613e86565b93505060406140d387828801613fb4565b925050606085013567ffffffffffffffff8111156140f4576140f3614c8a565b5b61410087828801613f30565b91505092959194509250565b6000806040838503121561412357614122614c8f565b5b600061413185828601613e86565b925050602061414285828601613ef1565b9150509250929050565b6000806040838503121561416357614162614c8f565b5b600061417185828601613e86565b925050602061418285828601613fb4565b9150509250929050565b600080602083850312156141a3576141a2614c8f565b5b600083013567ffffffffffffffff8111156141c1576141c0614c8a565b5b6141cd85828601613e9b565b92509250509250929050565b6000602082840312156141ef576141ee614c8f565b5b60006141fd84828501613f06565b91505092915050565b60006020828403121561421c5761421b614c8f565b5b600061422a84828501613f1b565b91505092915050565b6000806020838503121561424a57614249614c8f565b5b600083013567ffffffffffffffff81111561426857614267614c8a565b5b61427485828601613f5e565b92509250509250929050565b60006020828403121561429657614295614c8f565b5b60006142a484828501613fb4565b91505092915050565b6142b681614993565b82525050565b6142c5816149a5565b82525050565b60006142d68261483b565b6142e08185614851565b93506142f0818560208601614a4c565b6142f981614c94565b840191505092915050565b61430d81614a07565b82525050565b600061431e82614846565b6143288185614862565b9350614338818560208601614a4c565b61434181614c94565b840191505092915050565b600061435782614846565b6143618185614873565b9350614371818560208601614a4c565b80840191505092915050565b6000815461438a81614a7f565b6143948186614873565b945060018216600081146143af57600181146143c0576143f3565b60ff198316865281860193506143f3565b6143c985614826565b60005b838110156143eb578154818901526001820191506020810190506143cc565b838801955050505b50505092915050565b6000614409602683614862565b915061441482614ca5565b604082019050919050565b600061442c600b83614862565b915061443782614cf4565b602082019050919050565b600061444f601283614862565b915061445a82614d1d565b602082019050919050565b6000614472601e83614862565b915061447d82614d46565b602082019050919050565b6000614495600e83614862565b91506144a082614d6f565b602082019050919050565b60006144b8600f83614862565b91506144c382614d98565b602082019050919050565b60006144db602083614862565b91506144e682614dc1565b602082019050919050565b60006144fe601f83614862565b915061450982614dea565b602082019050919050565b6000614521600a83614862565b915061452c82614e13565b602082019050919050565b6000614544601083614862565b915061454f82614e3c565b602082019050919050565b614563816149fd565b82525050565b6000614575828561437d565b9150614581828461434c565b91508190509392505050565b60006020820190506145a260008301846142ad565b92915050565b60006080820190506145bd60008301876142ad565b6145ca60208301866142ad565b6145d7604083018561455a565b81810360608301526145e981846142cb565b905095945050505050565b600060408201905061460960008301856142ad565b614616602083018461455a565b9392505050565b600060208201905061463260008301846142bc565b92915050565b600060208201905061464d6000830184614304565b92915050565b6000602082019050818103600083015261466d8184614313565b905092915050565b6000602082019050818103600083015261468e816143fc565b9050919050565b600060208201905081810360008301526146ae8161441f565b9050919050565b600060208201905081810360008301526146ce81614442565b9050919050565b600060208201905081810360008301526146ee81614465565b9050919050565b6000602082019050818103600083015261470e81614488565b9050919050565b6000602082019050818103600083015261472e816144ab565b9050919050565b6000602082019050818103600083015261474e816144ce565b9050919050565b6000602082019050818103600083015261476e816144f1565b9050919050565b6000602082019050818103600083015261478e81614514565b9050919050565b600060208201905081810360008301526147ae81614537565b9050919050565b60006020820190506147ca600083018461455a565b92915050565b60006147da6147eb565b90506147e68282614ab1565b919050565b6000604051905090565b600067ffffffffffffffff8211156148105761480f614c47565b5b61481982614c94565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614889826149fd565b9150614894836149fd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148c9576148c8614b5c565b5b828201905092915050565b60006148df826149fd565b91506148ea836149fd565b9250826148fa576148f9614b8b565b5b828204905092915050565b6000614910826149fd565b915061491b836149fd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561495457614953614b5c565b5b828202905092915050565b600061496a826149fd565b9150614975836149fd565b92508282101561498857614987614b5c565b5b828203905092915050565b600061499e826149dd565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614a1282614a19565b9050919050565b6000614a2482614a2b565b9050919050565b6000614a36826149dd565b9050919050565b82818337600083830152505050565b60005b83811015614a6a578082015181840152602081019050614a4f565b83811115614a79576000848401525b50505050565b60006002820490506001821680614a9757607f821691505b60208210811415614aab57614aaa614bba565b5b50919050565b614aba82614c94565b810181811067ffffffffffffffff82111715614ad957614ad8614c47565b5b80604052505050565b6000614aed826149fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b2057614b1f614b5c565b5b600182019050919050565b6000614b36826149fd565b9150614b41836149fd565b925082614b5157614b50614b8b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d494e545f434c4f534544000000000000000000000000000000000000000000600082015250565b7f57524f4e475f424c4f434b5f4e554d4245520000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f5354414b494e475f434c4f534544000000000000000000000000000000000000600082015250565b7f4558434545445f5045525f4d494e540000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e00600082015250565b7f4558434545445f4d415800000000000000000000000000000000000000000000600082015250565b7f494e53554646494349454e545f45544800000000000000000000000000000000600082015250565b614e6e81614993565b8114614e7957600080fd5b50565b614e85816149a5565b8114614e9057600080fd5b50565b614e9c816149b1565b8114614ea757600080fd5b50565b614eb3816149fd565b8114614ebe57600080fd5b5056fea2646970667358221220324270d214f43bd8b77c085246d5a65d4ebc8baa7f2eac3f549205ea3ebeeffb64736f6c6343000807003368747470733a2f2f73746f726167656170692e666c65656b2e636f2f62373031653262332d643164632d346335322d393538362d3864323665653935623035642d6275636b65742f464d442f

Deployed Bytecode

0x6080604052600436106102605760003560e01c806380bfb9d311610144578063ad41e0e1116100b6578063c87b56dd1161007a578063c87b56dd146108a8578063d92656a7146108e5578063e985e9c514610910578063ed76b0b41461094d578063f2fde38b14610978578063f42202e8146109a157610267565b8063ad41e0e1146107e9578063b7f751d814610814578063b88d4fde1461083f578063c5d62b1814610868578063c720c6641461087f57610267565b806395d89b411161010857806395d89b411461070e57806397f5ec67146107395780639dd373b914610750578063a0712d6814610779578063a22cb46514610795578063a9a47654146107be57610267565b806380bfb9d314610627578063888687be1461065257806389dab1821461068f5780638da5cb5b146106ba57806391b7f5ed146106e557610267565b80633ccfd60b116101dd5780636352211e116101a15780636352211e1461052b5780636b69e05b146105685780636efabb011461057f57806370a08231146105a8578063715018a6146105e55780637979fd24146105fc57610267565b80633ccfd60b1461044857806342842e0e1461045f578063446339f1146104885780634f6ccce7146104c557806355f804b31461050257610267565b8063163e1e6111610224578063163e1e611461036557806318160ddd1461038e5780631fe9eabc146103b957806323b872dd146103e25780632f745c591461040b57610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d457806308f09a8914610311578063095ea7b31461033c57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610293600480360381019061028e91906141d9565b6109ca565b6040516102a0919061461d565b60405180910390f35b3480156102b557600080fd5b506102be610b14565b6040516102cb9190614653565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190614280565b610ba6565b604051610308919061458d565b60405180910390f35b34801561031d57600080fd5b50610326610c22565b60405161033391906147b5565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e919061414c565b610c28565b005b34801561037157600080fd5b5061038c6004803603810190610387919061418c565b610d33565b005b34801561039a57600080fd5b506103a3610f1d565b6040516103b091906147b5565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190614280565b610f75565b005b3480156103ee57600080fd5b5061040960048036038101906104049190614036565b610ffb565b005b34801561041757600080fd5b50610432600480360381019061042d919061414c565b6112bc565b60405161043f91906147b5565b60405180910390f35b34801561045457600080fd5b5061045d6114c4565b005b34801561046b57600080fd5b5061048660048036038101906104819190614036565b611604565b005b34801561049457600080fd5b506104af60048036038101906104aa9190614280565b611624565b6040516104bc91906147b5565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190614280565b61163c565b6040516104f991906147b5565b60405180910390f35b34801561050e57600080fd5b5061052960048036038101906105249190614233565b6117af565b005b34801561053757600080fd5b50610552600480360381019061054d9190614280565b611841565b60405161055f919061458d565b60405180910390f35b34801561057457600080fd5b5061057d611857565b005b34801561058b57600080fd5b506105a660048036038101906105a19190614280565b611b52565b005b3480156105b457600080fd5b506105cf60048036038101906105ca9190613fc9565b611bd8565b6040516105dc91906147b5565b60405180910390f35b3480156105f157600080fd5b506105fa611ca8565b005b34801561060857600080fd5b50610611611d30565b60405161061e91906147b5565b60405180910390f35b34801561063357600080fd5b5061063c611d36565b60405161064991906147b5565b60405180910390f35b34801561065e57600080fd5b506106796004803603810190610674919061414c565b611d3c565b60405161068691906147b5565b60405180910390f35b34801561069b57600080fd5b506106a4611d6d565b6040516106b191906147b5565b60405180910390f35b3480156106c657600080fd5b506106cf611d73565b6040516106dc919061458d565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190614280565b611d9c565b005b34801561071a57600080fd5b50610723611e22565b6040516107309190614653565b60405180910390f35b34801561074557600080fd5b5061074e611eb4565b005b34801561075c57600080fd5b5061077760048036038101906107729190613fc9565b611f5c565b005b610793600480360381019061078e9190614280565b61201c565b005b3480156107a157600080fd5b506107bc60048036038101906107b7919061410c565b6122bd565b005b3480156107ca57600080fd5b506107d3612435565b6040516107e09190614638565b60405180910390f35b3480156107f557600080fd5b506107fe61245b565b60405161080b91906147b5565b60405180910390f35b34801561082057600080fd5b50610829612461565b604051610836919061461d565b60405180910390f35b34801561084b57600080fd5b5061086660048036038101906108619190614089565b612474565b005b34801561087457600080fd5b5061087d612737565b005b34801561088b57600080fd5b506108a660048036038101906108a19190614280565b6127df565b005b3480156108b457600080fd5b506108cf60048036038101906108ca9190614280565b612865565b6040516108dc9190614653565b60405180910390f35b3480156108f157600080fd5b506108fa6128e1565b604051610907919061461d565b60405180910390f35b34801561091c57600080fd5b5061093760048036038101906109329190613ff6565b6128f4565b604051610944919061461d565b60405180910390f35b34801561095957600080fd5b50610962612988565b60405161096f91906147b5565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a9190613fc9565b61298e565b005b3480156109ad57600080fd5b506109c860048036038101906109c39190614280565b612a86565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610afd57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b0d5750610b0c82612bfb565b5b9050919050565b606060028054610b2390614a7f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4f90614a7f565b8015610b9c5780601f10610b7157610100808354040283529160200191610b9c565b820191906000526020600020905b815481529060010190602001808311610b7f57829003601f168201915b5050505050905090565b6000610bb182612c65565b610be7576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60105481565b6000610c3382611841565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c9b576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cba612cce565b73ffffffffffffffffffffffffffffffffffffffff1614158015610cec5750610cea81610ce5612cce565b6128f4565b155b15610d23576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d2e838383612cd6565b505050565b610d3b612cce565b73ffffffffffffffffffffffffffffffffffffffff16610d59611d73565b73ffffffffffffffffffffffffffffffffffffffff1614610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da690614735565b60405180910390fd5b600a5482829050600e54610dc3919061487e565b1115610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90614775565b60405180910390fd5b60005b82829050811015610f18574360116000600e5481526020019081526020016000208190555060126000848484818110610e4357610e42614c18565b5b9050602002016020810190610e589190613fc9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600e549080600181540180825580915050600190039060005260206000200160009091909190915055600e6000815480929190610ece90614ae2565b9190505550610f05838383818110610ee957610ee8614c18565b5b9050602002016020810190610efe9190613fc9565b6001612d88565b8080610f1090614ae2565b915050610e07565b505050565b6000600160109054906101000a90046fffffffffffffffffffffffffffffffff16600160009054906101000a90046fffffffffffffffffffffffffffffffff16036fffffffffffffffffffffffffffffffff16905090565b610f7d612cce565b73ffffffffffffffffffffffffffffffffffffffff16610f9b611d73565b73ffffffffffffffffffffffffffffffffffffffff1614610ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe890614735565b60405180910390fd5b80600a8190555050565b60005b601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905081101561122d5781601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061109a57611099614c18565b5b9060005260206000200154141561121a57601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050611139919061495f565b8154811061114a57611149614c18565b5b9060005260206000200154601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106111a6576111a5614c18565b5b9060005260206000200181905550601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061120357611202614be9565b5b600190038181906000526020600020016000905590555b808061122590614ae2565b915050610ffe565b50601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002001600090919091909150554360116000838152602001908152602001600020819055506112b7838383612da6565b505050565b60006112c783611bd8565b82106112ff576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008060005b838110156114b8576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001511561141757506114ab565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461145757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156114a957868414156114a05781955050505050506114be565b83806001019450505b505b808060010191505061133a565b50600080fd5b92915050565b6114cc612cce565b73ffffffffffffffffffffffffffffffffffffffff166114ea611d73565b73ffffffffffffffffffffffffffffffffffffffff1614611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790614735565b60405180910390fd5b73a4f213f5e49d9a423bb280024b577053b23b697473ffffffffffffffffffffffffffffffffffffffff166108fc60144761157b91906148d4565b9081150290604051600060405180830381858888f193505050501580156115a6573d6000803e3d6000fd5b50733445544e92ef4a2708000a08d20f14b24ba460f173ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611601573d6000803e3d6000fd5b50565b61161f83838360405180602001604052806000815250612474565b505050565b60116020528060005260406000206000915090505481565b600080600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1690506000805b82811015611777576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611769578583141561176057819450505050506117aa565b82806001019350505b508080600101915050611676565b506040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6117b7612cce565b73ffffffffffffffffffffffffffffffffffffffff166117d5611d73565b73ffffffffffffffffffffffffffffffffffffffff161461182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290614735565b60405180910390fd5b81816009919061183c929190613d5e565b505050565b600061184c82612db6565b600001519050919050565b600f60019054906101000a900460ff166118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d906146f5565b60405180910390fd5b6000805b601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811015611abf57600060116000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020848154811061194b5761194a614c18565b5b9060005260206000200154815260200190815260200160002054116119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c906146b5565b60405180910390fd5b60116000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106119fa576119f9614c18565b5b906000526020600020015481526020019081526020016000205443611a1f919061495f565b601054611a2c9190614905565b82611a37919061487e565b91504360116000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110611a8f57611a8e614c18565b5b90600052602060002001548152602001908152602001600020819055508080611ab790614ae2565b9150506118aa565b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b8152600401611b1d9291906145f4565b600060405180830381600087803b158015611b3757600080fd5b505af1158015611b4b573d6000803e3d6000fd5b5050505050565b611b5a612cce565b73ffffffffffffffffffffffffffffffffffffffff16611b78611d73565b73ffffffffffffffffffffffffffffffffffffffff1614611bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc590614735565b60405180910390fd5b8060108190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c40576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611cb0612cce565b73ffffffffffffffffffffffffffffffffffffffff16611cce611d73565b73ffffffffffffffffffffffffffffffffffffffff1614611d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1b90614735565b60405180910390fd5b611d2e6000613060565b565b600a5481565b600b5481565b60126020528160005260406000208181548110611d5857600080fd5b90600052602060002001600091509150505481565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611da4612cce565b73ffffffffffffffffffffffffffffffffffffffff16611dc2611d73565b73ffffffffffffffffffffffffffffffffffffffff1614611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90614735565b60405180910390fd5b80600c8190555050565b606060038054611e3190614a7f565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5d90614a7f565b8015611eaa5780601f10611e7f57610100808354040283529160200191611eaa565b820191906000526020600020905b815481529060010190602001808311611e8d57829003601f168201915b5050505050905090565b611ebc612cce565b73ffffffffffffffffffffffffffffffffffffffff16611eda611d73565b73ffffffffffffffffffffffffffffffffffffffff1614611f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2790614735565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b611f64612cce565b73ffffffffffffffffffffffffffffffffffffffff16611f82611d73565b73ffffffffffffffffffffffffffffffffffffffff1614611fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcf90614735565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461208a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612081906146d5565b60405180910390fd5b600f60009054906101000a900460ff166120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d090614695565b60405180910390fd5b600a5481600e546120ea919061487e565b111561212b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212290614775565b60405180910390fd5b600d54811115612170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216790614715565b60405180910390fd5b3481600c5461217f9190614905565b1115801561219157506103e8600e5410155b806121b857503481600b546121a69190614905565b111580156121b757506103e8600e54105b5b6121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee90614795565b60405180910390fd5b60005b818110156122af574360116000600e54815260200190815260200160002081905550601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600e549080600181540180825580915050600190039060005260206000200160009091909190915055600e600081548092919061229790614ae2565b919050555080806122a790614ae2565b9150506121fa565b506122ba3382612d88565b50565b6122c5612cce565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561232a576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000612337612cce565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166123e4612cce565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612429919061461d565b60405180910390a35050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b600f60009054906101000a900460ff1681565b60005b601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156126a65782601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061251357612512614c18565b5b9060005260206000200154141561269357601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001601260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506125b2919061495f565b815481106125c3576125c2614c18565b5b9060005260206000200154601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061261f5761261e614c18565b5b9060005260206000200181905550601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061267c5761267b614be9565b5b600190038181906000526020600020016000905590555b808061269e90614ae2565b915050612477565b50601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082908060018154018082558091505060019003906000526020600020016000909190919091505543601160008481526020019081526020016000208190555061273184848484613124565b50505050565b61273f612cce565b73ffffffffffffffffffffffffffffffffffffffff1661275d611d73565b73ffffffffffffffffffffffffffffffffffffffff16146127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa90614735565b60405180910390fd5b600f60019054906101000a900460ff1615600f60016101000a81548160ff021916908315150217905550565b6127e7612cce565b73ffffffffffffffffffffffffffffffffffffffff16612805611d73565b73ffffffffffffffffffffffffffffffffffffffff161461285b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285290614735565b60405180910390fd5b80600b8190555050565b606061287082612c65565b6128af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a690614755565b60405180910390fd5b60096128ba83613177565b6040516020016128cb929190614569565b6040516020818303038152906040529050919050565b600f60019054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c5481565b612996612cce565b73ffffffffffffffffffffffffffffffffffffffff166129b4611d73565b73ffffffffffffffffffffffffffffffffffffffff1614612a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0190614735565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7190614675565b60405180910390fd5b612a8381613060565b50565b612a8e612cce565b73ffffffffffffffffffffffffffffffffffffffff16612aac611d73565b73ffffffffffffffffffffffffffffffffffffffff1614612b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af990614735565b60405180910390fd5b600a5481600e54612b13919061487e565b1115612b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4b90614775565b60405180910390fd5b4360116000600e54815260200190815260200160002081905550601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600e549080600181540180825580915050600190039060005260206000200160009091909190915055600e6000815480929190612be990614ae2565b9190505550612bf83382612d88565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1682108015612cc7575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b612da28282604051806020016040528060008152506132d8565b5050565b612db18383836132ea565b505050565b612dbe613de4565b6000829050600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16811015613029576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161302757600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612f0b57809250505061305b565b5b60011561302657818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461302157809250505061305b565b612f0c565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61312f8484846132ea565b61313b84848484613809565b613171576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060008214156131bf576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132d3565b600082905060005b600082146131f15780806131da90614ae2565b915050600a826131ea91906148d4565b91506131c7565b60008167ffffffffffffffff81111561320d5761320c614c47565b5b6040519080825280601f01601f19166020018201604052801561323f5781602001600182028036833780820191505090505b5090505b600085146132cc57600182613258919061495f565b9150600a856132679190614b2b565b6030613273919061487e565b60f81b81838151811061328957613288614c18565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132c591906148d4565b9450613243565b8093505050505b919050565b6132e58383836001613997565b505050565b60006132f582612db6565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661331c612cce565b73ffffffffffffffffffffffffffffffffffffffff16148061334f575061334e8260000151613349612cce565b6128f4565b5b80613394575061335d612cce565b73ffffffffffffffffffffffffffffffffffffffff1661337c84610ba6565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806133cd576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614613436576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561349d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134aa8585856001613d2f565b6134ba6000848460000151612cd6565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561379957600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168110156137985782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46138028585856001613d35565b5050505050565b600061382a8473ffffffffffffffffffffffffffffffffffffffff16613d3b565b1561398a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613853612cce565b8786866040518563ffffffff1660e01b815260040161387594939291906145a8565b602060405180830381600087803b15801561388f57600080fd5b505af19250505080156138c057506040513d601f19601f820116820180604052508101906138bd9190614206565b60015b61393a573d80600081146138f0576040519150601f19603f3d011682016040523d82523d6000602084013e6138f5565b606091505b50600081511415613932576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061398f565b600190505b949350505050565b6000600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613a33576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613a6e576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613a7b6000868387613d2f565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015613ce057818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838015613c945750613c926000888488613809565b155b15613ccb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81806001019250508080600101915050613c19565b5080600160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050613d286000868387613d35565b5050505050565b50505050565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613d6a90614a7f565b90600052602060002090601f016020900481019282613d8c5760008555613dd3565b82601f10613da557803560ff1916838001178555613dd3565b82800160010185558215613dd3579182015b82811115613dd2578235825591602001919060010190613db7565b5b509050613de09190613e27565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613e40576000816000905550600101613e28565b5090565b6000613e57613e52846147f5565b6147d0565b905082815260208101848484011115613e7357613e72614c85565b5b613e7e848285614a3d565b509392505050565b600081359050613e9581614e65565b92915050565b60008083601f840112613eb157613eb0614c7b565b5b8235905067ffffffffffffffff811115613ece57613ecd614c76565b5b602083019150836020820283011115613eea57613ee9614c80565b5b9250929050565b600081359050613f0081614e7c565b92915050565b600081359050613f1581614e93565b92915050565b600081519050613f2a81614e93565b92915050565b600082601f830112613f4557613f44614c7b565b5b8135613f55848260208601613e44565b91505092915050565b60008083601f840112613f7457613f73614c7b565b5b8235905067ffffffffffffffff811115613f9157613f90614c76565b5b602083019150836001820283011115613fad57613fac614c80565b5b9250929050565b600081359050613fc381614eaa565b92915050565b600060208284031215613fdf57613fde614c8f565b5b6000613fed84828501613e86565b91505092915050565b6000806040838503121561400d5761400c614c8f565b5b600061401b85828601613e86565b925050602061402c85828601613e86565b9150509250929050565b60008060006060848603121561404f5761404e614c8f565b5b600061405d86828701613e86565b935050602061406e86828701613e86565b925050604061407f86828701613fb4565b9150509250925092565b600080600080608085870312156140a3576140a2614c8f565b5b60006140b187828801613e86565b94505060206140c287828801613e86565b93505060406140d387828801613fb4565b925050606085013567ffffffffffffffff8111156140f4576140f3614c8a565b5b61410087828801613f30565b91505092959194509250565b6000806040838503121561412357614122614c8f565b5b600061413185828601613e86565b925050602061414285828601613ef1565b9150509250929050565b6000806040838503121561416357614162614c8f565b5b600061417185828601613e86565b925050602061418285828601613fb4565b9150509250929050565b600080602083850312156141a3576141a2614c8f565b5b600083013567ffffffffffffffff8111156141c1576141c0614c8a565b5b6141cd85828601613e9b565b92509250509250929050565b6000602082840312156141ef576141ee614c8f565b5b60006141fd84828501613f06565b91505092915050565b60006020828403121561421c5761421b614c8f565b5b600061422a84828501613f1b565b91505092915050565b6000806020838503121561424a57614249614c8f565b5b600083013567ffffffffffffffff81111561426857614267614c8a565b5b61427485828601613f5e565b92509250509250929050565b60006020828403121561429657614295614c8f565b5b60006142a484828501613fb4565b91505092915050565b6142b681614993565b82525050565b6142c5816149a5565b82525050565b60006142d68261483b565b6142e08185614851565b93506142f0818560208601614a4c565b6142f981614c94565b840191505092915050565b61430d81614a07565b82525050565b600061431e82614846565b6143288185614862565b9350614338818560208601614a4c565b61434181614c94565b840191505092915050565b600061435782614846565b6143618185614873565b9350614371818560208601614a4c565b80840191505092915050565b6000815461438a81614a7f565b6143948186614873565b945060018216600081146143af57600181146143c0576143f3565b60ff198316865281860193506143f3565b6143c985614826565b60005b838110156143eb578154818901526001820191506020810190506143cc565b838801955050505b50505092915050565b6000614409602683614862565b915061441482614ca5565b604082019050919050565b600061442c600b83614862565b915061443782614cf4565b602082019050919050565b600061444f601283614862565b915061445a82614d1d565b602082019050919050565b6000614472601e83614862565b915061447d82614d46565b602082019050919050565b6000614495600e83614862565b91506144a082614d6f565b602082019050919050565b60006144b8600f83614862565b91506144c382614d98565b602082019050919050565b60006144db602083614862565b91506144e682614dc1565b602082019050919050565b60006144fe601f83614862565b915061450982614dea565b602082019050919050565b6000614521600a83614862565b915061452c82614e13565b602082019050919050565b6000614544601083614862565b915061454f82614e3c565b602082019050919050565b614563816149fd565b82525050565b6000614575828561437d565b9150614581828461434c565b91508190509392505050565b60006020820190506145a260008301846142ad565b92915050565b60006080820190506145bd60008301876142ad565b6145ca60208301866142ad565b6145d7604083018561455a565b81810360608301526145e981846142cb565b905095945050505050565b600060408201905061460960008301856142ad565b614616602083018461455a565b9392505050565b600060208201905061463260008301846142bc565b92915050565b600060208201905061464d6000830184614304565b92915050565b6000602082019050818103600083015261466d8184614313565b905092915050565b6000602082019050818103600083015261468e816143fc565b9050919050565b600060208201905081810360008301526146ae8161441f565b9050919050565b600060208201905081810360008301526146ce81614442565b9050919050565b600060208201905081810360008301526146ee81614465565b9050919050565b6000602082019050818103600083015261470e81614488565b9050919050565b6000602082019050818103600083015261472e816144ab565b9050919050565b6000602082019050818103600083015261474e816144ce565b9050919050565b6000602082019050818103600083015261476e816144f1565b9050919050565b6000602082019050818103600083015261478e81614514565b9050919050565b600060208201905081810360008301526147ae81614537565b9050919050565b60006020820190506147ca600083018461455a565b92915050565b60006147da6147eb565b90506147e68282614ab1565b919050565b6000604051905090565b600067ffffffffffffffff8211156148105761480f614c47565b5b61481982614c94565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614889826149fd565b9150614894836149fd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148c9576148c8614b5c565b5b828201905092915050565b60006148df826149fd565b91506148ea836149fd565b9250826148fa576148f9614b8b565b5b828204905092915050565b6000614910826149fd565b915061491b836149fd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561495457614953614b5c565b5b828202905092915050565b600061496a826149fd565b9150614975836149fd565b92508282101561498857614987614b5c565b5b828203905092915050565b600061499e826149dd565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614a1282614a19565b9050919050565b6000614a2482614a2b565b9050919050565b6000614a36826149dd565b9050919050565b82818337600083830152505050565b60005b83811015614a6a578082015181840152602081019050614a4f565b83811115614a79576000848401525b50505050565b60006002820490506001821680614a9757607f821691505b60208210811415614aab57614aaa614bba565b5b50919050565b614aba82614c94565b810181811067ffffffffffffffff82111715614ad957614ad8614c47565b5b80604052505050565b6000614aed826149fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b2057614b1f614b5c565b5b600182019050919050565b6000614b36826149fd565b9150614b41836149fd565b925082614b5157614b50614b8b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d494e545f434c4f534544000000000000000000000000000000000000000000600082015250565b7f57524f4e475f424c4f434b5f4e554d4245520000000000000000000000000000600082015250565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b7f5354414b494e475f434c4f534544000000000000000000000000000000000000600082015250565b7f4558434545445f5045525f4d494e540000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e00600082015250565b7f4558434545445f4d415800000000000000000000000000000000000000000000600082015250565b7f494e53554646494349454e545f45544800000000000000000000000000000000600082015250565b614e6e81614993565b8114614e7957600080fd5b50565b614e85816149a5565b8114614e9057600080fd5b50565b614e9c816149b1565b8114614ea757600080fd5b50565b614eb3816149fd565b8114614ebe57600080fd5b5056fea2646970667358221220324270d214f43bd8b77c085246d5a65d4ebc8baa7f2eac3f549205ea3ebeeffb64736f6c63430008070033

Deployed Bytecode Sourcemap

47893:6134:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28171:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30861:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32461:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48397:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32024:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48754:427;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25330:276;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51095:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52745:596;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26953:1146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50381:288;;;;;;;;;;;;;:::i;:::-;;33673:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48454:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25899:754;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51314:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30670:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51724:769;;;;;;;;;;;;;:::i;:::-;;52501:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28657:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46903:103;;;;;;;;;;;;;:::i;:::-;;48136:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48171:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48516:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48261:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46252:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50884:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31030:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50677:96;;;;;;;;;;;;;:::i;:::-;;52603:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49544:829;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32778:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47973:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48299:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48338:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53349:638;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50781:95;;;;;;;;;;;;;:::i;:::-;;50985:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51428:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48367:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33151:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48216:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47161:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49189:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28171:422;28318:4;28375:25;28360:40;;;:11;:40;;;;:105;;;;28432:33;28417:48;;;:11;:48;;;;28360:105;:172;;;;28497:35;28482:50;;;:11;:50;;;;28360:172;:225;;;;28549:36;28573:11;28549:23;:36::i;:::-;28360:225;28340:245;;28171:422;;;:::o;30861:100::-;30915:13;30948:5;30941:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30861:100;:::o;32461:245::-;32565:7;32595:16;32603:7;32595;:16::i;:::-;32590:64;;32620:34;;;;;;;;;;;;;;32590:64;32674:15;:24;32690:7;32674:24;;;;;;;;;;;;;;;;;;;;;32667:31;;32461:245;;;:::o;48397:50::-;;;;:::o;32024:371::-;32097:13;32113:24;32129:7;32113:15;:24::i;:::-;32097:40;;32158:5;32152:11;;:2;:11;;;32148:48;;;32172:24;;;;;;;;;;;;;;32148:48;32229:5;32213:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;32239:37;32256:5;32263:12;:10;:12::i;:::-;32239:16;:37::i;:::-;32238:38;32213:63;32209:138;;;32300:35;;;;;;;;;;;;;;32209:138;32359:28;32368:2;32372:7;32381:5;32359:8;:28::i;:::-;32086:309;32024:371;;:::o;48754:427::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48876:6:::1;;48856:9;;:16;;48836:17;;:36;;;;:::i;:::-;:46;;48828:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;48913:9;48908:266;48932:9;;:16;;48928:1;:20;48908:266;;;49012:12;48970:20;:39;48991:17;;48970:39;;;;;;;;;;;:54;;;;49039:10;:24;49050:9;;49060:1;49050:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;49039:24;;;;;;;;;;;;;;;49069:17;;49039:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49102:17;;:19;;;;;;;;;:::i;:::-;;;;;;49136:26;49146:9;;49156:1;49146:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;49160:1;49136:9;:26::i;:::-;48950:3;;;;;:::i;:::-;;;;48908:266;;;;48754:427:::0;;:::o;25330:276::-;25383:7;25575:12;;;;;;;;;;;25559:13;;;;;;;;;;;:28;25552:35;;;;25330:276;:::o;51095:89::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51168:8:::1;51159:6;:17;;;;51095:89:::0;:::o;52745:596::-;52876:13;52871:319;52903:10;:16;52914:4;52903:16;;;;;;;;;;;;;;;:23;;;;52895:5;:31;52871:319;;;52983:7;52956:10;:16;52967:4;52956:16;;;;;;;;;;;;;;;52973:5;52956:23;;;;;;;;:::i;:::-;;;;;;;;;;:34;52952:227;;;53037:10;:16;53048:4;53037:16;;;;;;;;;;;;;;;53102:1;53076:10;:16;53087:4;53076:16;;;;;;;;;;;;;;;:23;;;;:27;;;;:::i;:::-;53037:85;;;;;;;;:::i;:::-;;;;;;;;;;53011:10;:16;53022:4;53011:16;;;;;;;;;;;;;;;53028:5;53011:23;;;;;;;;:::i;:::-;;;;;;;;;:111;;;;53141:10;:16;53152:4;53141:16;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;52952:227;52928:7;;;;;:::i;:::-;;;;52871:319;;;;53200:10;:14;53211:2;53200:14;;;;;;;;;;;;;;;53220:7;53200:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53271:12;53239:20;:29;53260:7;53239:29;;;;;;;;;;;:44;;;;53294:39;53315:4;53321:2;53325:7;53294:20;:39::i;:::-;52745:596;;;:::o;26953:1146::-;27078:7;27116:16;27126:5;27116:9;:16::i;:::-;27107:5;:25;27103:61;;27141:23;;;;;;;;;;;;;;27103:61;27175:22;27200:13;;;;;;;;;;;27175:38;;;;27224:19;27254:25;27455:9;27450:557;27470:14;27466:1;:18;27450:557;;;27510:31;27544:11;:14;27556:1;27544:14;;;;;;;;;;;27510:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27581:9;:16;;;27577:73;;;27622:8;;;27577:73;27698:1;27672:28;;:9;:14;;;:28;;;27668:111;;27745:9;:14;;;27725:34;;27668:111;27822:5;27801:26;;:17;:26;;;27797:195;;;27871:5;27856:11;:20;27852:85;;;27912:1;27905:8;;;;;;;;;27852:85;27959:13;;;;;;;27797:195;27491:516;27450:557;27486:3;;;;;;;27450:557;;;;28083:8;;;26953:1146;;;;;:::o;50381:288::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50439:42:::1;50431:60;;:112;50530:2;50506:21;:26;;;;:::i;:::-;50431:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50562:42;50554:60;;:107;50629:21;50554:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50381:288::o:0;33673:185::-;33811:39;33828:4;33834:2;33838:7;33811:39;;;;;;;;;;;;:16;:39::i;:::-;33673:185;;;:::o;48454:55::-;;;;;;;;;;;;;;;;;:::o;25899:754::-;26002:7;26027:22;26052:13;;;;;;;;;;;26027:38;;;;26076:19;26271:9;26266:328;26286:14;26282:1;:18;26266:328;;;26326:31;26360:11;:14;26372:1;26360:14;;;;;;;;;;;26326:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26398:9;:16;;;26393:186;;26458:5;26443:11;:20;26439:85;;;26499:1;26492:8;;;;;;;;26439:85;26546:13;;;;;;;26393:186;26307:287;26302:3;;;;;;;26266:328;;;;26622:23;;;;;;;;;;;;;;25899:754;;;;:::o;51314:106::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51405:7:::1;;51389:13;:23;;;;;;;:::i;:::-;;51314:106:::0;;:::o;30670:124::-;30734:7;30761:20;30773:7;30761:11;:20::i;:::-;:25;;;30754:32;;30670:124;;;:::o;51724:769::-;51783:11;;;;;;;;;;;51775:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;51824:20;51880:13;51861:566;51920:10;:22;51931:10;51920:22;;;;;;;;;;;;;;;:29;;;;51912:5;:37;51861:566;;;52078:1;52024:20;:51;52045:10;:22;52056:10;52045:22;;;;;;;;;;;;;;;52068:5;52045:29;;;;;;;;:::i;:::-;;;;;;;;;;52024:51;;;;;;;;;;;;:55;51998:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;52281:20;:51;52302:10;:22;52313:10;52302:22;;;;;;;;;;;;;;;52325:5;52302:29;;;;;;;;:::i;:::-;;;;;;;;;;52281:51;;;;;;;;;;;;52244:12;:89;;;;:::i;:::-;52212:11;;:122;;;;:::i;:::-;52180:12;:154;;;;:::i;:::-;52148:186;;52403:12;52349:20;:51;52370:10;:22;52381:10;52370:22;;;;;;;;;;;;;;;52393:5;52370:29;;;;;;;;:::i;:::-;;;;;;;;;;52349:51;;;;;;;;;;;:66;;;;51964:7;;;;;:::i;:::-;;;;51861:566;;;;52439:15;;;;;;;;;;;:20;;;52460:10;52472:12;52439:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51764:729;51724:769::o;52501:94::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52583:4:::1;52569:11;:18;;;;52501:94:::0;:::o;28657:206::-;28721:7;28762:1;28745:19;;:5;:19;;;28741:60;;;28773:28;;;;;;;;;;;;;;28741:60;28827:12;:19;28840:5;28827:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;28819:36;;28812:43;;28657:206;;;:::o;46903:103::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46968:30:::1;46995:1;46968:18;:30::i;:::-;46903:103::o:0;48136:28::-;;;;:::o;48171:38::-;;;;:::o;48516:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48261:31::-;;;;:::o;46252:87::-;46298:7;46325:6;;;;;;;;;;;46318:13;;46252:87;:::o;50884:93::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50961:8:::1;50950;:19;;;;50884:93:::0;:::o;31030:104::-;31086:13;31119:7;31112:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31030:104;:::o;50677:96::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50755:10:::1;;;;;;;;;;;50754:11;50741:10;;:24;;;;;;;;;;;;;;;;;;50677:96::o:0;52603:134::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52713:15:::1;52686;;:43;;;;;;;;;;;;;;;;;;52603:134:::0;:::o;49544:829::-;48681:10;48668:23;;:9;:23;;;48660:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;49630:10:::1;;;;;;;;;;;49622:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;49712:6;;49695:13;49675:17;;:33;;;;:::i;:::-;:43;;49667:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;49769:11;;49752:13;:28;;49744:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;49862:9;49845:13;49834:8;;:24;;;;:::i;:::-;:37;;:83;;;;;49913:4;49892:17;;:25;;49834:83;49833:199;;;;49973:9;49956:13;49940;;:29;;;;:::i;:::-;:42;;:91;;;;;50027:4;50007:17;;:24;49940:91;49833:199;49811:265;;;;;;;;;;;;:::i;:::-;;;;;;;;;50092:13;50087:232;50119:13;50111:5;:21;50087:232;;;50200:12;50158:20;:39;50179:17;;50158:39;;;;;;;;;;;:54;;;;50227:10;:22;50238:10;50227:22;;;;;;;;;;;;;;;50255:17;;50227:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50288:17;;:19;;;;;;;;;:::i;:::-;;;;;;50134:7;;;;;:::i;:::-;;;;50087:232;;;;50329:36;50339:10;50351:13;50329:9;:36::i;:::-;49544:829:::0;:::o;32778:302::-;32904:12;:10;:12::i;:::-;32892:24;;:8;:24;;;32888:54;;;32925:17;;;;;;;;;;;;;;32888:54;33000:8;32955:18;:32;32974:12;:10;:12::i;:::-;32955:32;;;;;;;;;;;;;;;:42;32988:8;32955:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33053:8;33024:48;;33039:12;:10;:12::i;:::-;33024:48;;;33063:8;33024:48;;;;;;:::i;:::-;;;;;;;;32778:302;;:::o;47973:31::-;;;;;;;;;;;;;:::o;48299:32::-;;;;:::o;48338:22::-;;;;;;;;;;;;;:::o;53349:638::-;53512:13;53507:319;53539:10;:16;53550:4;53539:16;;;;;;;;;;;;;;;:23;;;;53531:5;:31;53507:319;;;53619:7;53592:10;:16;53603:4;53592:16;;;;;;;;;;;;;;;53609:5;53592:23;;;;;;;;:::i;:::-;;;;;;;;;;:34;53588:227;;;53673:10;:16;53684:4;53673:16;;;;;;;;;;;;;;;53738:1;53712:10;:16;53723:4;53712:16;;;;;;;;;;;;;;;:23;;;;:27;;;;:::i;:::-;53673:85;;;;;;;;:::i;:::-;;;;;;;;;;53647:10;:16;53658:4;53647:16;;;;;;;;;;;;;;;53664:5;53647:23;;;;;;;;:::i;:::-;;;;;;;;;:111;;;;53777:10;:16;53788:4;53777:16;;;;;;;;;;;;;;;:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;53588:227;53564:7;;;;;:::i;:::-;;;;53507:319;;;;53836:10;:14;53847:2;53836:14;;;;;;;;;;;;;;;53856:7;53836:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53907:12;53875:20;:29;53896:7;53875:29;;;;;;;;;;;:44;;;;53930:49;53955:4;53961:2;53965:7;53974:4;53930:24;:49::i;:::-;53349:638;;;;:::o;50781:95::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50857:11:::1;;;;;;;;;;;50856:12;50842:11;;:26;;;;;;;;;;;;;;;;;;50781:95::o:0;50985:102::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51071:8:::1;51055:13;:24;;;;50985:102:::0;:::o;51428:288::-;51538:13;51577:16;51585:7;51577;:16::i;:::-;51569:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;51673:13;51688:18;:7;:16;:18::i;:::-;51656:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51642:66;;51428:288;;;:::o;48367:23::-;;;;;;;;;;;;;:::o;33151:214::-;33293:4;33322:18;:25;33341:5;33322:25;;;;;;;;;;;;;;;:35;33348:8;33322:35;;;;;;;;;;;;;;;;;;;;;;;;;33315:42;;33151:214;;;;:::o;48216:38::-;;;;:::o;47161:238::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47284:1:::1;47264:22;;:8;:22;;;;47242:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;47363:28;47382:8;47363:18;:28::i;:::-;47161:238:::0;:::o;49189:347::-;46483:12;:10;:12::i;:::-;46472:23;;:7;:5;:7::i;:::-;:23;;;46464:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49308:6:::1;;49291:13;49271:17;;:33;;;;:::i;:::-;:43;;49263:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;49382:12;49340:20;:39;49361:17;;49340:39;;;;;;;;;;;:54;;;;49405:10;:22;49416:10;49405:22;;;;;;;;;;;;;;;49433:17;;49405:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49462:17;;:19;;;;;;;;;:::i;:::-;;;;;;49492:36;49502:10;49514:13;49492:9;:36::i;:::-;49189:347:::0;:::o;14032:207::-;14162:4;14206:25;14191:40;;;:11;:40;;;;14184:47;;14032:207;;;:::o;34526:144::-;34583:4;34617:13;;;;;;;;;;;34607:23;;:7;:23;:55;;;;;34635:11;:20;34647:7;34635:20;;;;;;;;;;;:27;;;;;;;;;;;;34634:28;34607:55;34600:62;;34526:144;;;:::o;21849:98::-;21902:7;21929:10;21922:17;;21849:98;:::o;41854:196::-;41996:2;41969:15;:24;41985:7;41969:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;42034:7;42030:2;42014:28;;42023:5;42014:28;;;;;;;;;;;;41854:196;;;:::o;34678:104::-;34747:27;34757:2;34761:8;34747:27;;;;;;;;;;;;:9;:27::i;:::-;34678:104;;:::o;33432:170::-;33566:28;33576:4;33582:2;33586:7;33566:9;:28::i;:::-;33432:170;;;:::o;29495:1113::-;29583:21;;:::i;:::-;29622:12;29637:7;29622:22;;29693:13;;;;;;;;;;;29686:20;;:4;:20;29682:859;;;29727:31;29761:11;:17;29773:4;29761:17;;;;;;;;;;;29727:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29802:9;:16;;;29797:729;;29873:1;29847:28;;:9;:14;;;:28;;;29843:101;;29911:9;29904:16;;;;;;29843:101;30246:261;30253:4;30246:261;;;30286:6;;;;;;;;30331:11;:17;30343:4;30331:17;;;;;;;;;;;30319:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30405:1;30379:28;;:9;:14;;;:28;;;30375:109;;30447:9;30440:16;;;;;;30375:109;30246:261;;;29797:729;29708:833;29682:859;30569:31;;;;;;;;;;;;;;29495:1113;;;;:::o;47559:191::-;47633:16;47652:6;;;;;;;;;;;47633:25;;47678:8;47669:6;;:17;;;;;;;;;;;;;;;;;;47733:8;47702:40;;47723:8;47702:40;;;;;;;;;;;;47622:128;47559:191;:::o;33929:342::-;34096:28;34106:4;34112:2;34116:7;34096:9;:28::i;:::-;34140:48;34163:4;34169:2;34173:7;34182:5;34140:22;:48::i;:::-;34135:129;;34212:40;;;;;;;;;;;;;;34135:129;33929:342;;;;:::o;468:723::-;524:13;754:1;745:5;:10;741:53;;;772:10;;;;;;;;;;;;;;;;;;;;;741:53;804:12;819:5;804:20;;835:14;860:78;875:1;867:4;:9;860:78;;893:8;;;;;:::i;:::-;;;;924:2;916:10;;;;;:::i;:::-;;;860:78;;;948:19;980:6;970:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;948:39;;998:154;1014:1;1005:5;:10;998:154;;1042:1;1032:11;;;;;:::i;:::-;;;1109:2;1101:5;:10;;;;:::i;:::-;1088:2;:24;;;;:::i;:::-;1075:39;;1058:6;1065;1058:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1138:2;1129:11;;;;;:::i;:::-;;;998:154;;;1176:6;1162:21;;;;;468:723;;;;:::o;35145:163::-;35268:32;35274:2;35278:8;35288:5;35295:4;35268:5;:32::i;:::-;35145:163;;;:::o;37304:2138::-;37419:35;37457:20;37469:7;37457:11;:20::i;:::-;37419:58;;37490:22;37532:13;:18;;;37516:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;37567:50;37584:13;:18;;;37604:12;:10;:12::i;:::-;37567:16;:50::i;:::-;37516:101;:154;;;;37658:12;:10;:12::i;:::-;37634:36;;:20;37646:7;37634:11;:20::i;:::-;:36;;;37516:154;37490:181;;37689:17;37684:66;;37715:35;;;;;;;;;;;;;;37684:66;37787:4;37765:26;;:13;:18;;;:26;;;37761:67;;37800:28;;;;;;;;;;;;;;37761:67;37857:1;37843:16;;:2;:16;;;37839:52;;;37868:23;;;;;;;;;;;;;;37839:52;37904:43;37926:4;37932:2;37936:7;37945:1;37904:21;:43::i;:::-;38012:49;38029:1;38033:7;38042:13;:18;;;38012:8;:49::i;:::-;38387:1;38357:12;:18;38370:4;38357:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38431:1;38403:12;:16;38416:2;38403:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38477:2;38449:11;:20;38461:7;38449:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;38539:15;38494:11;:20;38506:7;38494:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;38807:19;38839:1;38829:7;:11;38807:33;;38900:1;38859:43;;:11;:24;38871:11;38859:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;38855:471;;;39084:13;;;;;;;;;;;39070:27;;:11;:27;39066:245;;;39154:13;:18;;;39122:11;:24;39134:11;39122:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;39237:13;:54;;;39195:11;:24;39207:11;39195:24;;;;;;;;;;;:39;;;:96;;;;;;;;;;;;;;;;;;39066:245;38855:471;38332:1005;39373:7;39369:2;39354:27;;39363:4;39354:27;;;;;;;;;;;;39392:42;39413:4;39419:2;39423:7;39432:1;39392:20;:42::i;:::-;37408:2034;;37304:2138;;;:::o;42615:923::-;42770:4;42791:15;:2;:13;;;:15::i;:::-;42787:744;;;42860:2;42844:36;;;42903:12;:10;:12::i;:::-;42938:4;42965:7;42995:5;42844:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42823:653;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43223:1;43206:6;:13;:18;43202:259;;;43256:40;;;;;;;;;;;;;;43202:259;43411:6;43405:13;43396:6;43392:2;43388:15;43381:38;42823:653;43093:45;;;43083:55;;;:6;:55;;;;43076:62;;;;;42787:744;43515:4;43508:11;;42615:923;;;;;;;:::o;35567:1483::-;35706:20;35729:13;;;;;;;;;;;35706:36;;;;35771:1;35757:16;;:2;:16;;;35753:48;;;35782:19;;;;;;;;;;;;;;35753:48;35828:1;35816:8;:13;35812:44;;;35838:18;;;;;;;;;;;;;;35812:44;35869:61;35899:1;35903:2;35907:12;35921:8;35869:21;:61::i;:::-;36243:8;36208:12;:16;36221:2;36208:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36307:8;36267:12;:16;36280:2;36267:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36366:2;36333:11;:25;36345:12;36333:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;36433:15;36383:11;:25;36395:12;36383:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;36466:20;36489:12;36466:35;;36523:9;36518:389;36538:8;36534:1;:12;36518:389;;;36602:12;36598:2;36577:38;;36594:1;36577:38;;;;;;;;;;;;36660:4;:89;;;;;36690:59;36721:1;36725:2;36729:12;36743:5;36690:22;:59::i;:::-;36689:60;36660:89;36634:225;;;36799:40;;;;;;;;;;;;;;36634:225;36877:14;;;;;;;36548:3;;;;;;;36518:389;;;;36947:12;36923:13;;:37;;;;;;;;;;;;;;;;;;36183:789;36982:60;37011:1;37015:2;37019:12;37033:8;36982:20;:60::i;:::-;35695:1355;35567:1483;;;;:::o;44186:159::-;;;;;:::o;45004:158::-;;;;;:::o;3490:326::-;3550:4;3807:1;3785:7;:19;;;:23;3778:30;;3490:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1159:133::-;1202:5;1240:6;1227:20;1218:29;;1256:30;1280:5;1256:30;:::i;:::-;1159:133;;;;:::o;1298:137::-;1343:5;1381:6;1368:20;1359:29;;1397:32;1423:5;1397:32;:::i;:::-;1298:137;;;;:::o;1441:141::-;1497:5;1528:6;1522:13;1513:22;;1544:32;1570:5;1544:32;:::i;:::-;1441:141;;;;:::o;1601:338::-;1656:5;1705:3;1698:4;1690:6;1686:17;1682:27;1672:122;;1713:79;;:::i;:::-;1672:122;1830:6;1817:20;1855:78;1929:3;1921:6;1914:4;1906:6;1902:17;1855:78;:::i;:::-;1846:87;;1662:277;1601:338;;;;:::o;1959:553::-;2017:8;2027:6;2077:3;2070:4;2062:6;2058:17;2054:27;2044:122;;2085:79;;:::i;:::-;2044:122;2198:6;2185:20;2175:30;;2228:18;2220:6;2217:30;2214:117;;;2250:79;;:::i;:::-;2214:117;2364:4;2356:6;2352:17;2340:29;;2418:3;2410:4;2402:6;2398:17;2388:8;2384:32;2381:41;2378:128;;;2425:79;;:::i;:::-;2378:128;1959:553;;;;;:::o;2518:139::-;2564:5;2602:6;2589:20;2580:29;;2618:33;2645:5;2618:33;:::i;:::-;2518:139;;;;:::o;2663:329::-;2722:6;2771:2;2759:9;2750:7;2746:23;2742:32;2739:119;;;2777:79;;:::i;:::-;2739:119;2897:1;2922:53;2967:7;2958:6;2947:9;2943:22;2922:53;:::i;:::-;2912:63;;2868:117;2663:329;;;;:::o;2998:474::-;3066:6;3074;3123:2;3111:9;3102:7;3098:23;3094:32;3091:119;;;3129:79;;:::i;:::-;3091:119;3249:1;3274:53;3319:7;3310:6;3299:9;3295:22;3274:53;:::i;:::-;3264:63;;3220:117;3376:2;3402:53;3447:7;3438:6;3427:9;3423:22;3402:53;:::i;:::-;3392:63;;3347:118;2998:474;;;;;:::o;3478:619::-;3555:6;3563;3571;3620:2;3608:9;3599:7;3595:23;3591:32;3588:119;;;3626:79;;:::i;:::-;3588:119;3746:1;3771:53;3816:7;3807:6;3796:9;3792:22;3771:53;:::i;:::-;3761:63;;3717:117;3873:2;3899:53;3944:7;3935:6;3924:9;3920:22;3899:53;:::i;:::-;3889:63;;3844:118;4001:2;4027:53;4072:7;4063:6;4052:9;4048:22;4027:53;:::i;:::-;4017:63;;3972:118;3478:619;;;;;:::o;4103:943::-;4198:6;4206;4214;4222;4271:3;4259:9;4250:7;4246:23;4242:33;4239:120;;;4278:79;;:::i;:::-;4239:120;4398:1;4423:53;4468:7;4459:6;4448:9;4444:22;4423:53;:::i;:::-;4413:63;;4369:117;4525:2;4551:53;4596:7;4587:6;4576:9;4572:22;4551:53;:::i;:::-;4541:63;;4496:118;4653:2;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4624:118;4809:2;4798:9;4794:18;4781:32;4840:18;4832:6;4829:30;4826:117;;;4862:79;;:::i;:::-;4826:117;4967:62;5021:7;5012:6;5001:9;4997:22;4967:62;:::i;:::-;4957:72;;4752:287;4103:943;;;;;;;:::o;5052:468::-;5117:6;5125;5174:2;5162:9;5153:7;5149:23;5145:32;5142:119;;;5180:79;;:::i;:::-;5142:119;5300:1;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5271:117;5427:2;5453:50;5495:7;5486:6;5475:9;5471:22;5453:50;:::i;:::-;5443:60;;5398:115;5052:468;;;;;:::o;5526:474::-;5594:6;5602;5651:2;5639:9;5630:7;5626:23;5622:32;5619:119;;;5657:79;;:::i;:::-;5619:119;5777:1;5802:53;5847:7;5838:6;5827:9;5823:22;5802:53;:::i;:::-;5792:63;;5748:117;5904:2;5930:53;5975:7;5966:6;5955:9;5951:22;5930:53;:::i;:::-;5920:63;;5875:118;5526:474;;;;;:::o;6006:559::-;6092:6;6100;6149:2;6137:9;6128:7;6124:23;6120:32;6117:119;;;6155:79;;:::i;:::-;6117:119;6303:1;6292:9;6288:17;6275:31;6333:18;6325:6;6322:30;6319:117;;;6355:79;;:::i;:::-;6319:117;6468:80;6540:7;6531:6;6520:9;6516:22;6468:80;:::i;:::-;6450:98;;;;6246:312;6006:559;;;;;:::o;6571:327::-;6629:6;6678:2;6666:9;6657:7;6653:23;6649:32;6646:119;;;6684:79;;:::i;:::-;6646:119;6804:1;6829:52;6873:7;6864:6;6853:9;6849:22;6829:52;:::i;:::-;6819:62;;6775:116;6571:327;;;;:::o;6904:349::-;6973:6;7022:2;7010:9;7001:7;6997:23;6993:32;6990:119;;;7028:79;;:::i;:::-;6990:119;7148:1;7173:63;7228:7;7219:6;7208:9;7204:22;7173:63;:::i;:::-;7163:73;;7119:127;6904:349;;;;:::o;7259:529::-;7330:6;7338;7387:2;7375:9;7366:7;7362:23;7358:32;7355:119;;;7393:79;;:::i;:::-;7355:119;7541:1;7530:9;7526:17;7513:31;7571:18;7563:6;7560:30;7557:117;;;7593:79;;:::i;:::-;7557:117;7706:65;7763:7;7754:6;7743:9;7739:22;7706:65;:::i;:::-;7688:83;;;;7484:297;7259:529;;;;;:::o;7794:329::-;7853:6;7902:2;7890:9;7881:7;7877:23;7873:32;7870:119;;;7908:79;;:::i;:::-;7870:119;8028:1;8053:53;8098:7;8089:6;8078:9;8074:22;8053:53;:::i;:::-;8043:63;;7999:117;7794:329;;;;:::o;8129:118::-;8216:24;8234:5;8216:24;:::i;:::-;8211:3;8204:37;8129:118;;:::o;8253:109::-;8334:21;8349:5;8334:21;:::i;:::-;8329:3;8322:34;8253:109;;:::o;8368:360::-;8454:3;8482:38;8514:5;8482:38;:::i;:::-;8536:70;8599:6;8594:3;8536:70;:::i;:::-;8529:77;;8615:52;8660:6;8655:3;8648:4;8641:5;8637:16;8615:52;:::i;:::-;8692:29;8714:6;8692:29;:::i;:::-;8687:3;8683:39;8676:46;;8458:270;8368:360;;;;:::o;8734:165::-;8838:54;8886:5;8838:54;:::i;:::-;8833:3;8826:67;8734:165;;:::o;8905:364::-;8993:3;9021:39;9054:5;9021:39;:::i;:::-;9076:71;9140:6;9135:3;9076:71;:::i;:::-;9069:78;;9156:52;9201:6;9196:3;9189:4;9182:5;9178:16;9156:52;:::i;:::-;9233:29;9255:6;9233:29;:::i;:::-;9228:3;9224:39;9217:46;;8997:272;8905:364;;;;:::o;9275:377::-;9381:3;9409:39;9442:5;9409:39;:::i;:::-;9464:89;9546:6;9541:3;9464:89;:::i;:::-;9457:96;;9562:52;9607:6;9602:3;9595:4;9588:5;9584:16;9562:52;:::i;:::-;9639:6;9634:3;9630:16;9623:23;;9385:267;9275:377;;;;:::o;9682:845::-;9785:3;9822:5;9816:12;9851:36;9877:9;9851:36;:::i;:::-;9903:89;9985:6;9980:3;9903:89;:::i;:::-;9896:96;;10023:1;10012:9;10008:17;10039:1;10034:137;;;;10185:1;10180:341;;;;10001:520;;10034:137;10118:4;10114:9;10103;10099:25;10094:3;10087:38;10154:6;10149:3;10145:16;10138:23;;10034:137;;10180:341;10247:38;10279:5;10247:38;:::i;:::-;10307:1;10321:154;10335:6;10332:1;10329:13;10321:154;;;10409:7;10403:14;10399:1;10394:3;10390:11;10383:35;10459:1;10450:7;10446:15;10435:26;;10357:4;10354:1;10350:12;10345:17;;10321:154;;;10504:6;10499:3;10495:16;10488:23;;10187:334;;10001:520;;9789:738;;9682:845;;;;:::o;10533:366::-;10675:3;10696:67;10760:2;10755:3;10696:67;:::i;:::-;10689:74;;10772:93;10861:3;10772:93;:::i;:::-;10890:2;10885:3;10881:12;10874:19;;10533:366;;;:::o;10905:::-;11047:3;11068:67;11132:2;11127:3;11068:67;:::i;:::-;11061:74;;11144:93;11233:3;11144:93;:::i;:::-;11262:2;11257:3;11253:12;11246:19;;10905:366;;;:::o;11277:::-;11419:3;11440:67;11504:2;11499:3;11440:67;:::i;:::-;11433:74;;11516:93;11605:3;11516:93;:::i;:::-;11634:2;11629:3;11625:12;11618:19;;11277:366;;;:::o;11649:::-;11791:3;11812:67;11876:2;11871:3;11812:67;:::i;:::-;11805:74;;11888:93;11977:3;11888:93;:::i;:::-;12006:2;12001:3;11997:12;11990:19;;11649:366;;;:::o;12021:::-;12163:3;12184:67;12248:2;12243:3;12184:67;:::i;:::-;12177:74;;12260:93;12349:3;12260:93;:::i;:::-;12378:2;12373:3;12369:12;12362:19;;12021:366;;;:::o;12393:::-;12535:3;12556:67;12620:2;12615:3;12556:67;:::i;:::-;12549:74;;12632:93;12721:3;12632:93;:::i;:::-;12750:2;12745:3;12741:12;12734:19;;12393:366;;;:::o;12765:::-;12907:3;12928:67;12992:2;12987:3;12928:67;:::i;:::-;12921:74;;13004:93;13093:3;13004:93;:::i;:::-;13122:2;13117:3;13113:12;13106:19;;12765:366;;;:::o;13137:::-;13279:3;13300:67;13364:2;13359:3;13300:67;:::i;:::-;13293:74;;13376:93;13465:3;13376:93;:::i;:::-;13494:2;13489:3;13485:12;13478:19;;13137:366;;;:::o;13509:::-;13651:3;13672:67;13736:2;13731:3;13672:67;:::i;:::-;13665:74;;13748:93;13837:3;13748:93;:::i;:::-;13866:2;13861:3;13857:12;13850:19;;13509:366;;;:::o;13881:::-;14023:3;14044:67;14108:2;14103:3;14044:67;:::i;:::-;14037:74;;14120:93;14209:3;14120:93;:::i;:::-;14238:2;14233:3;14229:12;14222:19;;13881:366;;;:::o;14253:118::-;14340:24;14358:5;14340:24;:::i;:::-;14335:3;14328:37;14253:118;;:::o;14377:429::-;14554:3;14576:92;14664:3;14655:6;14576:92;:::i;:::-;14569:99;;14685:95;14776:3;14767:6;14685:95;:::i;:::-;14678:102;;14797:3;14790:10;;14377:429;;;;;:::o;14812:222::-;14905:4;14943:2;14932:9;14928:18;14920:26;;14956:71;15024:1;15013:9;15009:17;15000:6;14956:71;:::i;:::-;14812:222;;;;:::o;15040:640::-;15235:4;15273:3;15262:9;15258:19;15250:27;;15287:71;15355:1;15344:9;15340:17;15331:6;15287:71;:::i;:::-;15368:72;15436:2;15425:9;15421:18;15412:6;15368:72;:::i;:::-;15450;15518:2;15507:9;15503:18;15494:6;15450:72;:::i;:::-;15569:9;15563:4;15559:20;15554:2;15543:9;15539:18;15532:48;15597:76;15668:4;15659:6;15597:76;:::i;:::-;15589:84;;15040:640;;;;;;;:::o;15686:332::-;15807:4;15845:2;15834:9;15830:18;15822:26;;15858:71;15926:1;15915:9;15911:17;15902:6;15858:71;:::i;:::-;15939:72;16007:2;15996:9;15992:18;15983:6;15939:72;:::i;:::-;15686:332;;;;;:::o;16024:210::-;16111:4;16149:2;16138:9;16134:18;16126:26;;16162:65;16224:1;16213:9;16209:17;16200:6;16162:65;:::i;:::-;16024:210;;;;:::o;16240:256::-;16350:4;16388:2;16377:9;16373:18;16365:26;;16401:88;16486:1;16475:9;16471:17;16462:6;16401:88;:::i;:::-;16240:256;;;;:::o;16502:313::-;16615:4;16653:2;16642:9;16638:18;16630:26;;16702:9;16696:4;16692:20;16688:1;16677:9;16673:17;16666:47;16730:78;16803:4;16794:6;16730:78;:::i;:::-;16722:86;;16502:313;;;;:::o;16821:419::-;16987:4;17025:2;17014:9;17010:18;17002:26;;17074:9;17068:4;17064:20;17060:1;17049:9;17045:17;17038:47;17102:131;17228:4;17102:131;:::i;:::-;17094:139;;16821:419;;;:::o;17246:::-;17412:4;17450:2;17439:9;17435:18;17427:26;;17499:9;17493:4;17489:20;17485:1;17474:9;17470:17;17463:47;17527:131;17653:4;17527:131;:::i;:::-;17519:139;;17246:419;;;:::o;17671:::-;17837:4;17875:2;17864:9;17860:18;17852:26;;17924:9;17918:4;17914:20;17910:1;17899:9;17895:17;17888:47;17952:131;18078:4;17952:131;:::i;:::-;17944:139;;17671:419;;;:::o;18096:::-;18262:4;18300:2;18289:9;18285:18;18277:26;;18349:9;18343:4;18339:20;18335:1;18324:9;18320:17;18313:47;18377:131;18503:4;18377:131;:::i;:::-;18369:139;;18096:419;;;:::o;18521:::-;18687:4;18725:2;18714:9;18710:18;18702:26;;18774:9;18768:4;18764:20;18760:1;18749:9;18745:17;18738:47;18802:131;18928:4;18802:131;:::i;:::-;18794:139;;18521:419;;;:::o;18946:::-;19112:4;19150:2;19139:9;19135:18;19127:26;;19199:9;19193:4;19189:20;19185:1;19174:9;19170:17;19163:47;19227:131;19353:4;19227:131;:::i;:::-;19219:139;;18946:419;;;:::o;19371:::-;19537:4;19575:2;19564:9;19560:18;19552:26;;19624:9;19618:4;19614:20;19610:1;19599:9;19595:17;19588:47;19652:131;19778:4;19652:131;:::i;:::-;19644:139;;19371:419;;;:::o;19796:::-;19962:4;20000:2;19989:9;19985:18;19977:26;;20049:9;20043:4;20039:20;20035:1;20024:9;20020:17;20013:47;20077:131;20203:4;20077:131;:::i;:::-;20069:139;;19796:419;;;:::o;20221:::-;20387:4;20425:2;20414:9;20410:18;20402:26;;20474:9;20468:4;20464:20;20460:1;20449:9;20445:17;20438:47;20502:131;20628:4;20502:131;:::i;:::-;20494:139;;20221:419;;;:::o;20646:::-;20812:4;20850:2;20839:9;20835:18;20827:26;;20899:9;20893:4;20889:20;20885:1;20874:9;20870:17;20863:47;20927:131;21053:4;20927:131;:::i;:::-;20919:139;;20646:419;;;:::o;21071:222::-;21164:4;21202:2;21191:9;21187:18;21179:26;;21215:71;21283:1;21272:9;21268:17;21259:6;21215:71;:::i;:::-;21071:222;;;;:::o;21299:129::-;21333:6;21360:20;;:::i;:::-;21350:30;;21389:33;21417:4;21409:6;21389:33;:::i;:::-;21299:129;;;:::o;21434:75::-;21467:6;21500:2;21494:9;21484:19;;21434:75;:::o;21515:307::-;21576:4;21666:18;21658:6;21655:30;21652:56;;;21688:18;;:::i;:::-;21652:56;21726:29;21748:6;21726:29;:::i;:::-;21718:37;;21810:4;21804;21800:15;21792:23;;21515:307;;;:::o;21828:141::-;21877:4;21900:3;21892:11;;21923:3;21920:1;21913:14;21957:4;21954:1;21944:18;21936:26;;21828:141;;;:::o;21975:98::-;22026:6;22060:5;22054:12;22044:22;;21975:98;;;:::o;22079:99::-;22131:6;22165:5;22159:12;22149:22;;22079:99;;;:::o;22184:168::-;22267:11;22301:6;22296:3;22289:19;22341:4;22336:3;22332:14;22317:29;;22184:168;;;;:::o;22358:169::-;22442:11;22476:6;22471:3;22464:19;22516:4;22511:3;22507:14;22492:29;;22358:169;;;;:::o;22533:148::-;22635:11;22672:3;22657:18;;22533:148;;;;:::o;22687:305::-;22727:3;22746:20;22764:1;22746:20;:::i;:::-;22741:25;;22780:20;22798:1;22780:20;:::i;:::-;22775:25;;22934:1;22866:66;22862:74;22859:1;22856:81;22853:107;;;22940:18;;:::i;:::-;22853:107;22984:1;22981;22977:9;22970:16;;22687:305;;;;:::o;22998:185::-;23038:1;23055:20;23073:1;23055:20;:::i;:::-;23050:25;;23089:20;23107:1;23089:20;:::i;:::-;23084:25;;23128:1;23118:35;;23133:18;;:::i;:::-;23118:35;23175:1;23172;23168:9;23163:14;;22998:185;;;;:::o;23189:348::-;23229:7;23252:20;23270:1;23252:20;:::i;:::-;23247:25;;23286:20;23304:1;23286:20;:::i;:::-;23281:25;;23474:1;23406:66;23402:74;23399:1;23396:81;23391:1;23384:9;23377:17;23373:105;23370:131;;;23481:18;;:::i;:::-;23370:131;23529:1;23526;23522:9;23511:20;;23189:348;;;;:::o;23543:191::-;23583:4;23603:20;23621:1;23603:20;:::i;:::-;23598:25;;23637:20;23655:1;23637:20;:::i;:::-;23632:25;;23676:1;23673;23670:8;23667:34;;;23681:18;;:::i;:::-;23667:34;23726:1;23723;23719:9;23711:17;;23543:191;;;;:::o;23740:96::-;23777:7;23806:24;23824:5;23806:24;:::i;:::-;23795:35;;23740:96;;;:::o;23842:90::-;23876:7;23919:5;23912:13;23905:21;23894:32;;23842:90;;;:::o;23938:149::-;23974:7;24014:66;24007:5;24003:78;23992:89;;23938:149;;;:::o;24093:126::-;24130:7;24170:42;24163:5;24159:54;24148:65;;24093:126;;;:::o;24225:77::-;24262:7;24291:5;24280:16;;24225:77;;;:::o;24308:143::-;24375:9;24408:37;24439:5;24408:37;:::i;:::-;24395:50;;24308:143;;;:::o;24457:126::-;24507:9;24540:37;24571:5;24540:37;:::i;:::-;24527:50;;24457:126;;;:::o;24589:113::-;24639:9;24672:24;24690:5;24672:24;:::i;:::-;24659:37;;24589:113;;;:::o;24708:154::-;24792:6;24787:3;24782;24769:30;24854:1;24845:6;24840:3;24836:16;24829:27;24708:154;;;:::o;24868:307::-;24936:1;24946:113;24960:6;24957:1;24954:13;24946:113;;;25045:1;25040:3;25036:11;25030:18;25026:1;25021:3;25017:11;25010:39;24982:2;24979:1;24975:10;24970:15;;24946:113;;;25077:6;25074:1;25071:13;25068:101;;;25157:1;25148:6;25143:3;25139:16;25132:27;25068:101;24917:258;24868:307;;;:::o;25181:320::-;25225:6;25262:1;25256:4;25252:12;25242:22;;25309:1;25303:4;25299:12;25330:18;25320:81;;25386:4;25378:6;25374:17;25364:27;;25320:81;25448:2;25440:6;25437:14;25417:18;25414:38;25411:84;;;25467:18;;:::i;:::-;25411:84;25232:269;25181:320;;;:::o;25507:281::-;25590:27;25612:4;25590:27;:::i;:::-;25582:6;25578:40;25720:6;25708:10;25705:22;25684:18;25672:10;25669:34;25666:62;25663:88;;;25731:18;;:::i;:::-;25663:88;25771:10;25767:2;25760:22;25550:238;25507:281;;:::o;25794:233::-;25833:3;25856:24;25874:5;25856:24;:::i;:::-;25847:33;;25902:66;25895:5;25892:77;25889:103;;;25972:18;;:::i;:::-;25889:103;26019:1;26012:5;26008:13;26001:20;;25794:233;;;:::o;26033:176::-;26065:1;26082:20;26100:1;26082:20;:::i;:::-;26077:25;;26116:20;26134:1;26116:20;:::i;:::-;26111:25;;26155:1;26145:35;;26160:18;;:::i;:::-;26145:35;26201:1;26198;26194:9;26189:14;;26033:176;;;;:::o;26215:180::-;26263:77;26260:1;26253:88;26360:4;26357:1;26350:15;26384:4;26381:1;26374:15;26401:180;26449:77;26446:1;26439:88;26546:4;26543:1;26536:15;26570:4;26567:1;26560:15;26587:180;26635:77;26632:1;26625:88;26732:4;26729:1;26722:15;26756:4;26753:1;26746:15;26773:180;26821:77;26818:1;26811:88;26918:4;26915:1;26908:15;26942:4;26939:1;26932:15;26959:180;27007:77;27004:1;26997:88;27104:4;27101:1;27094:15;27128:4;27125:1;27118:15;27145:180;27193:77;27190:1;27183:88;27290:4;27287:1;27280:15;27314:4;27311:1;27304:15;27331:117;27440:1;27437;27430:12;27454:117;27563:1;27560;27553:12;27577:117;27686:1;27683;27676:12;27700:117;27809:1;27806;27799:12;27823:117;27932:1;27929;27922:12;27946:117;28055:1;28052;28045:12;28069:102;28110:6;28161:2;28157:7;28152:2;28145:5;28141:14;28137:28;28127:38;;28069:102;;;:::o;28177:225::-;28317:34;28313:1;28305:6;28301:14;28294:58;28386:8;28381:2;28373:6;28369:15;28362:33;28177:225;:::o;28408:161::-;28548:13;28544:1;28536:6;28532:14;28525:37;28408:161;:::o;28575:168::-;28715:20;28711:1;28703:6;28699:14;28692:44;28575:168;:::o;28749:180::-;28889:32;28885:1;28877:6;28873:14;28866:56;28749:180;:::o;28935:164::-;29075:16;29071:1;29063:6;29059:14;29052:40;28935:164;:::o;29105:165::-;29245:17;29241:1;29233:6;29229:14;29222:41;29105:165;:::o;29276:182::-;29416:34;29412:1;29404:6;29400:14;29393:58;29276:182;:::o;29464:181::-;29604:33;29600:1;29592:6;29588:14;29581:57;29464:181;:::o;29651:160::-;29791:12;29787:1;29779:6;29775:14;29768:36;29651:160;:::o;29817:166::-;29957:18;29953:1;29945:6;29941:14;29934:42;29817:166;:::o;29989:122::-;30062:24;30080:5;30062:24;:::i;:::-;30055:5;30052:35;30042:63;;30101:1;30098;30091:12;30042:63;29989:122;:::o;30117:116::-;30187:21;30202:5;30187:21;:::i;:::-;30180:5;30177:32;30167:60;;30223:1;30220;30213:12;30167:60;30117:116;:::o;30239:120::-;30311:23;30328:5;30311:23;:::i;:::-;30304:5;30301:34;30291:62;;30349:1;30346;30339:12;30291:62;30239:120;:::o;30365:122::-;30438:24;30456:5;30438:24;:::i;:::-;30431:5;30428:35;30418:63;;30477:1;30474;30467:12;30418:63;30365:122;:::o

Swarm Source

ipfs://324270d214f43bd8b77c085246d5a65d4ebc8baa7f2eac3f549205ea3ebeeffb
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.