ETH Price: $3,159.46 (+1.37%)
Gas: 1 Gwei

Token

Larva Deads (LDEADS)
 

Overview

Max Total Supply

6,666 LDEADS

Holders

371

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
hongchul.eth
Balance
10 LDEADS
0x83bff380d2c59f88f3132542fb23b40afcf361d7
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:
LarvaDeads

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-03-12
*/

// 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 v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/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 v4.4.1 (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 tokenId);

    /**
     * @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: contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.0;









/**
 * @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..).
 *
 * Does not support burning tokens to address(0).
 *
 * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal currentIndex;

    // 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) {
        return currentIndex;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view override returns (uint256) {
        require(index < totalSupply(), 'ERC721A: global index out of bounds');
        return index;
    }

    /**
     * @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) {
        require(index < balanceOf(owner), 'ERC721A: owner index out of bounds');
        uint256 numMintedSoFar = totalSupply();
        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.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }

        revert('ERC721A: unable to get token of owner by index');
    }

    /**
     * @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) {
        require(owner != address(0), 'ERC721A: balance query for the zero address');
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        require(owner != address(0), 'ERC721A: number minted query for the zero address');
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * 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) {
        require(_exists(tokenId), 'ERC721A: owner query for nonexistent token');

        unchecked {
            for (uint256 curr = tokenId; curr >= 0; curr--) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (ownership.addr != address(0)) {
                    return ownership;
                }
            }
        }

        revert('ERC721A: unable to determine the owner of token');
    }

    /**
     * @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) {
        require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token');

        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);
        require(to != owner, 'ERC721A: approval to current owner');

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            'ERC721A: approve caller is not owner nor approved for all'
        );

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        require(_exists(tokenId), 'ERC721A: approved query for nonexistent token');

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public override {
        require(operator != _msgSender(), 'ERC721A: approve to caller');

        _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 override {
        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            'ERC721A: transfer to non ERC721Receiver implementer'
        );
    }

    /**
     * @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;
    }

    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;
        require(to != address(0), 'ERC721A: mint to the zero address');
        require(quantity != 0, 'ERC721A: quantity must be greater than 0');

        _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 > 1.56e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint128(quantity);
            _addressData[to].numberMinted += uint128(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) {
                    require(
                        _checkOnERC721Received(address(0), to, updatedIndex, _data),
                        'ERC721A: transfer to non ERC721Receiver implementer'
                    );
                }

                updatedIndex++;
            }

            currentIndex = 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 ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved');

        require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner');
        require(to != address(0), 'ERC721A: transfer to the zero address');

        _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**256.
        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)) {
                if (_exists(nextTokenId)) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

    /**
     * @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('ERC721A: transfer to non ERC721Receiver implementer');
                } 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.
     *
     * 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`.
     */
    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.
     *
     * 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` 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: contracts/LarvaDeads.sol



//██///////█████//██████//██////██//█████//////██████//███████//█████//██████//███████/
//██//////██///██/██///██/██////██/██///██/////██///██/██//////██///██/██///██/██//////
//██//////███████/██████//██////██/███████/////██///██/█████///███████/██///██/███████/
//██//////██///██/██///██//██//██//██///██/////██///██/██//////██///██/██///██//////██/
//███████/██///██/██///██///████///██///██/////██████//███████/██///██/██████//███████/

pragma solidity ^0.8.0;



contract LarvaDeads is ERC721A, Ownable {

    string private baseURI;

    uint256 public maxSupply = 6666;
    uint256 public constant free = 666;
    uint256 public price = 0.00666 ether;

    constructor(string memory baseURI_) ERC721A("Larva Deads", "LDEADS") {
        setBaseURI(baseURI_);
    }

    function setBaseURI(string memory baseURI_) public onlyOwner {
        baseURI = baseURI_;
    }

    function mint(uint256 amount) external payable {
        require(amount <= 10, "Max 10 per tx");
        uint256 minted = totalSupply();
        require(minted + amount <= maxSupply, "Above maximum supply!");
        if (minted >= free) {
            require(price * amount <= msg.value, "Insufficient amount of ether!");
        } else if (minted + amount > free) {
            require(price * (minted + amount - free) <= msg.value, "Insufficient amount of ether!");
        }
        _safeMint(_msgSender(), amount);
    }

    function setNewPrice(uint256 newPrice) external onlyOwner {
        price = newPrice;
    }

    function cutSupply(uint256 newSupply) external onlyOwner {
        require(newSupply < maxSupply, "New supply must be less than current supply");
        maxSupply = newSupply;
    }

    function withdrawAll() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(owner()).transfer(balance);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"cutSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"free","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","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":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"newPrice","type":"uint256"}],"name":"setNewPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","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":[],"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":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052611a0a6009556617a93c16344000600a553480156200002257600080fd5b506040516200457a3803806200457a8339818101604052810190620000489190620003f1565b6040518060400160405280600b81526020017f4c617276612044656164730000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4c444541445300000000000000000000000000000000000000000000000000008152508160019080519060200190620000cc929190620002c3565b508060029080519060200190620000e5929190620002c3565b50505062000108620000fc6200012060201b60201c565b6200012860201b60201c565b6200011981620001ee60201b60201c565b5062000649565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001fe6200012060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002246200029960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200027d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002749062000469565b60405180910390fd5b806008908051906020019062000295929190620002c3565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002d19062000531565b90600052602060002090601f016020900481019282620002f5576000855562000341565b82601f106200031057805160ff191683800117855562000341565b8280016001018555821562000341579182015b828111156200034057825182559160200191906001019062000323565b5b50905062000350919062000354565b5090565b5b808211156200036f57600081600090555060010162000355565b5090565b60006200038a6200038484620004b4565b6200048b565b905082815260208101848484011115620003a957620003a862000600565b5b620003b6848285620004fb565b509392505050565b600082601f830112620003d657620003d5620005fb565b5b8151620003e884826020860162000373565b91505092915050565b6000602082840312156200040a57620004096200060a565b5b600082015167ffffffffffffffff8111156200042b576200042a62000605565b5b6200043984828501620003be565b91505092915050565b600062000451602083620004ea565b91506200045e8262000620565b602082019050919050565b60006020820190508181036000830152620004848162000442565b9050919050565b600062000497620004aa565b9050620004a5828262000567565b919050565b6000604051905090565b600067ffffffffffffffff821115620004d257620004d1620005cc565b5b620004dd826200060f565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200051b578082015181840152602081019050620004fe565b838111156200052b576000848401525b50505050565b600060028204905060018216806200054a57607f821691505b602082108114156200056157620005606200059d565b5b50919050565b62000572826200060f565b810181811067ffffffffffffffff82111715620005945762000593620005cc565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b613f2180620006596000396000f3fe60806040526004361061019c5760003560e01c8063715018a6116100ec578063b88d4fde1161008a578063e985e9c511610064578063e985e9c5146105b9578063ee8cdd4e146105f6578063f2fde38b1461061f578063f4c44569146106485761019c565b8063b88d4fde14610528578063c87b56dd14610551578063d5abeb011461058e5761019c565b806395d89b41116100c657806395d89b411461048d578063a035b1fe146104b8578063a0712d68146104e3578063a22cb465146104ff5761019c565b8063715018a614610434578063853828b61461044b5780638da5cb5b146104625761019c565b806323b872dd116101595780634f6ccce7116101335780634f6ccce71461035457806355f804b3146103915780636352211e146103ba57806370a08231146103f75761019c565b806323b872dd146102c55780632f745c59146102ee57806342842e0e1461032b5761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b3146102465780631370128e1461026f57806318160ddd1461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612b2a565b610671565b6040516101d5919061307a565b60405180910390f35b3480156101ea57600080fd5b506101f36107bb565b6040516102009190613095565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612bcd565b61084d565b60405161023d9190613013565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612aea565b6108d2565b005b34801561027b57600080fd5b506102846109eb565b6040516102919190613397565b60405180910390f35b3480156102a657600080fd5b506102af6109f1565b6040516102bc9190613397565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e791906129d4565b6109fa565b005b3480156102fa57600080fd5b5061031560048036038101906103109190612aea565b610a0a565b6040516103229190613397565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d91906129d4565b610bfc565b005b34801561036057600080fd5b5061037b60048036038101906103769190612bcd565b610c1c565b6040516103889190613397565b60405180910390f35b34801561039d57600080fd5b506103b860048036038101906103b39190612b84565b610c6f565b005b3480156103c657600080fd5b506103e160048036038101906103dc9190612bcd565b610d05565b6040516103ee9190613013565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190612967565b610d1b565b60405161042b9190613397565b60405180910390f35b34801561044057600080fd5b50610449610e04565b005b34801561045757600080fd5b50610460610e8c565b005b34801561046e57600080fd5b50610477610f5e565b6040516104849190613013565b60405180910390f35b34801561049957600080fd5b506104a2610f88565b6040516104af9190613095565b60405180910390f35b3480156104c457600080fd5b506104cd61101a565b6040516104da9190613397565b60405180910390f35b6104fd60048036038101906104f89190612bcd565b611020565b005b34801561050b57600080fd5b5061052660048036038101906105219190612aaa565b6111b2565b005b34801561053457600080fd5b5061054f600480360381019061054a9190612a27565b611333565b005b34801561055d57600080fd5b5061057860048036038101906105739190612bcd565b61138f565b6040516105859190613095565b60405180910390f35b34801561059a57600080fd5b506105a3611437565b6040516105b09190613397565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190612994565b61143d565b6040516105ed919061307a565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190612bcd565b6114d1565b005b34801561062b57600080fd5b5061064660048036038101906106419190612967565b611557565b005b34801561065457600080fd5b5061066f600480360381019061066a9190612bcd565b61164f565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061073c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107a457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107b457506107b382611719565b5b9050919050565b6060600180546107ca90613647565b80601f01602080910402602001604051908101604052809291908181526020018280546107f690613647565b80156108435780601f1061081857610100808354040283529160200191610843565b820191906000526020600020905b81548152906001019060200180831161082657829003601f168201915b5050505050905090565b600061085882611783565b610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e90613377565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108dd82610d05565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561094e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610945906132b7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661096d611790565b73ffffffffffffffffffffffffffffffffffffffff16148061099c575061099b81610996611790565b61143d565b5b6109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d2906131d7565b60405180910390fd5b6109e6838383611798565b505050565b61029a81565b60008054905090565b610a0583838361184a565b505050565b6000610a1583610d1b565b8210610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d906130b7565b60405180910390fd5b6000610a606109f1565b905060008060005b83811015610bba576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610b5a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bac5786841415610ba3578195505050505050610bf6565b83806001019450505b508080600101915050610a68565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bed90613337565b60405180910390fd5b92915050565b610c1783838360405180602001604052806000815250611333565b505050565b6000610c266109f1565b8210610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90613197565b60405180910390fd5b819050919050565b610c77611790565b73ffffffffffffffffffffffffffffffffffffffff16610c95610f5e565b73ffffffffffffffffffffffffffffffffffffffff1614610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290613237565b60405180910390fd5b8060089080519060200190610d01929190612741565b5050565b6000610d1082611d8a565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d83906131f7565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610e0c611790565b73ffffffffffffffffffffffffffffffffffffffff16610e2a610f5e565b73ffffffffffffffffffffffffffffffffffffffff1614610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7790613237565b60405180910390fd5b610e8a6000611f24565b565b610e94611790565b73ffffffffffffffffffffffffffffffffffffffff16610eb2610f5e565b73ffffffffffffffffffffffffffffffffffffffff1614610f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eff90613237565b60405180910390fd5b6000479050610f15610f5e565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f5a573d6000803e3d6000fd5b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610f9790613647565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc390613647565b80156110105780601f10610fe557610100808354040283529160200191611010565b820191906000526020600020905b815481529060010190602001808311610ff357829003601f168201915b5050505050905090565b600a5481565b600a811115611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b906130f7565b60405180910390fd5b600061106e6109f1565b9050600954828261107f919061347c565b11156110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b7906130d7565b60405180910390fd5b61029a811061111e573482600a546110d89190613503565b1115611119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111090613177565b60405180910390fd5b61119d565b61029a828261112d919061347c565b111561119c573461029a8383611143919061347c565b61114d919061355d565b600a5461115a9190613503565b111561119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119290613177565b60405180910390fd5b5b5b6111ae6111a8611790565b83611fea565b5050565b6111ba611790565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f90613277565b60405180910390fd5b8060066000611235611790565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166112e2611790565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611327919061307a565b60405180910390a35050565b61133e84848461184a565b61134a84848484612008565b611389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611380906132d7565b60405180910390fd5b50505050565b606061139a82611783565b6113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090613257565b60405180910390fd5b60006113e361219f565b9050600081511415611404576040518060200160405280600081525061142f565b8061140e84612231565b60405160200161141f929190612fef565b6040516020818303038152906040525b915050919050565b60095481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114d9611790565b73ffffffffffffffffffffffffffffffffffffffff166114f7610f5e565b73ffffffffffffffffffffffffffffffffffffffff161461154d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154490613237565b60405180910390fd5b80600a8190555050565b61155f611790565b73ffffffffffffffffffffffffffffffffffffffff1661157d610f5e565b73ffffffffffffffffffffffffffffffffffffffff16146115d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ca90613237565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a90613117565b60405180910390fd5b61164c81611f24565b50565b611657611790565b73ffffffffffffffffffffffffffffffffffffffff16611675610f5e565b73ffffffffffffffffffffffffffffffffffffffff16146116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c290613237565b60405180910390fd5b600954811061170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170690613137565b60405180910390fd5b8060098190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061185582611d8a565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661187c611790565b73ffffffffffffffffffffffffffffffffffffffff1614806118d857506118a1611790565b73ffffffffffffffffffffffffffffffffffffffff166118c08461084d565b73ffffffffffffffffffffffffffffffffffffffff16145b806118f457506118f382600001516118ee611790565b61143d565b5b905080611936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192d90613297565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146119a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199f90613217565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0f906131b7565b60405180910390fd5b611a258585856001612392565b611a356000848460000151611798565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d1a57611c7981611783565b15611d195782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d838585856001612398565b5050505050565b611d926127c7565b611d9b82611783565b611dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd190613157565b60405180910390fd5b60008290505b60008110611ee3576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611ed4578092505050611f1f565b50808060019003915050611de0565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1690613357565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61200482826040518060200160405280600081525061239e565b5050565b60006120298473ffffffffffffffffffffffffffffffffffffffff166123b0565b15612192578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612052611790565b8786866040518563ffffffff1660e01b8152600401612074949392919061302e565b602060405180830381600087803b15801561208e57600080fd5b505af19250505080156120bf57506040513d601f19601f820116820180604052508101906120bc9190612b57565b60015b612142573d80600081146120ef576040519150601f19603f3d011682016040523d82523d6000602084013e6120f4565b606091505b5060008151141561213a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612131906132d7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612197565b600190505b949350505050565b6060600880546121ae90613647565b80601f01602080910402602001604051908101604052809291908181526020018280546121da90613647565b80156122275780601f106121fc57610100808354040283529160200191612227565b820191906000526020600020905b81548152906001019060200180831161220a57829003601f168201915b5050505050905090565b60606000821415612279576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061238d565b600082905060005b600082146122ab578080612294906136aa565b915050600a826122a491906134d2565b9150612281565b60008167ffffffffffffffff8111156122c7576122c66137e0565b5b6040519080825280601f01601f1916602001820160405280156122f95781602001600182028036833780820191505090505b5090505b6000851461238657600182612312919061355d565b9150600a8561232191906136f3565b603061232d919061347c565b60f81b818381518110612343576123426137b1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561237f91906134d2565b94506122fd565b8093505050505b919050565b50505050565b50505050565b6123ab83838360016123c3565b505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612430906132f7565b60405180910390fd5b600084141561247d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247490613317565b60405180910390fd5b61248a6000868387612392565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561272457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4831561270f576126cf6000888488612008565b61270e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612705906132d7565b60405180910390fd5b5b81806001019250508080600101915050612658565b50806000819055505061273a6000868387612398565b5050505050565b82805461274d90613647565b90600052602060002090601f01602090048101928261276f57600085556127b6565b82601f1061278857805160ff19168380011785556127b6565b828001600101855582156127b6579182015b828111156127b557825182559160200191906001019061279a565b5b5090506127c39190612801565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561281a576000816000905550600101612802565b5090565b600061283161282c846133d7565b6133b2565b90508281526020810184848401111561284d5761284c613814565b5b612858848285613605565b509392505050565b600061287361286e84613408565b6133b2565b90508281526020810184848401111561288f5761288e613814565b5b61289a848285613605565b509392505050565b6000813590506128b181613e8f565b92915050565b6000813590506128c681613ea6565b92915050565b6000813590506128db81613ebd565b92915050565b6000815190506128f081613ebd565b92915050565b600082601f83011261290b5761290a61380f565b5b813561291b84826020860161281e565b91505092915050565b600082601f8301126129395761293861380f565b5b8135612949848260208601612860565b91505092915050565b60008135905061296181613ed4565b92915050565b60006020828403121561297d5761297c61381e565b5b600061298b848285016128a2565b91505092915050565b600080604083850312156129ab576129aa61381e565b5b60006129b9858286016128a2565b92505060206129ca858286016128a2565b9150509250929050565b6000806000606084860312156129ed576129ec61381e565b5b60006129fb868287016128a2565b9350506020612a0c868287016128a2565b9250506040612a1d86828701612952565b9150509250925092565b60008060008060808587031215612a4157612a4061381e565b5b6000612a4f878288016128a2565b9450506020612a60878288016128a2565b9350506040612a7187828801612952565b925050606085013567ffffffffffffffff811115612a9257612a91613819565b5b612a9e878288016128f6565b91505092959194509250565b60008060408385031215612ac157612ac061381e565b5b6000612acf858286016128a2565b9250506020612ae0858286016128b7565b9150509250929050565b60008060408385031215612b0157612b0061381e565b5b6000612b0f858286016128a2565b9250506020612b2085828601612952565b9150509250929050565b600060208284031215612b4057612b3f61381e565b5b6000612b4e848285016128cc565b91505092915050565b600060208284031215612b6d57612b6c61381e565b5b6000612b7b848285016128e1565b91505092915050565b600060208284031215612b9a57612b9961381e565b5b600082013567ffffffffffffffff811115612bb857612bb7613819565b5b612bc484828501612924565b91505092915050565b600060208284031215612be357612be261381e565b5b6000612bf184828501612952565b91505092915050565b612c0381613591565b82525050565b612c12816135a3565b82525050565b6000612c2382613439565b612c2d818561344f565b9350612c3d818560208601613614565b612c4681613823565b840191505092915050565b6000612c5c82613444565b612c668185613460565b9350612c76818560208601613614565b612c7f81613823565b840191505092915050565b6000612c9582613444565b612c9f8185613471565b9350612caf818560208601613614565b80840191505092915050565b6000612cc8602283613460565b9150612cd382613834565b604082019050919050565b6000612ceb601583613460565b9150612cf682613883565b602082019050919050565b6000612d0e600d83613460565b9150612d19826138ac565b602082019050919050565b6000612d31602683613460565b9150612d3c826138d5565b604082019050919050565b6000612d54602b83613460565b9150612d5f82613924565b604082019050919050565b6000612d77602a83613460565b9150612d8282613973565b604082019050919050565b6000612d9a601d83613460565b9150612da5826139c2565b602082019050919050565b6000612dbd602383613460565b9150612dc8826139eb565b604082019050919050565b6000612de0602583613460565b9150612deb82613a3a565b604082019050919050565b6000612e03603983613460565b9150612e0e82613a89565b604082019050919050565b6000612e26602b83613460565b9150612e3182613ad8565b604082019050919050565b6000612e49602683613460565b9150612e5482613b27565b604082019050919050565b6000612e6c602083613460565b9150612e7782613b76565b602082019050919050565b6000612e8f602f83613460565b9150612e9a82613b9f565b604082019050919050565b6000612eb2601a83613460565b9150612ebd82613bee565b602082019050919050565b6000612ed5603283613460565b9150612ee082613c17565b604082019050919050565b6000612ef8602283613460565b9150612f0382613c66565b604082019050919050565b6000612f1b603383613460565b9150612f2682613cb5565b604082019050919050565b6000612f3e602183613460565b9150612f4982613d04565b604082019050919050565b6000612f61602883613460565b9150612f6c82613d53565b604082019050919050565b6000612f84602e83613460565b9150612f8f82613da2565b604082019050919050565b6000612fa7602f83613460565b9150612fb282613df1565b604082019050919050565b6000612fca602d83613460565b9150612fd582613e40565b604082019050919050565b612fe9816135fb565b82525050565b6000612ffb8285612c8a565b91506130078284612c8a565b91508190509392505050565b60006020820190506130286000830184612bfa565b92915050565b60006080820190506130436000830187612bfa565b6130506020830186612bfa565b61305d6040830185612fe0565b818103606083015261306f8184612c18565b905095945050505050565b600060208201905061308f6000830184612c09565b92915050565b600060208201905081810360008301526130af8184612c51565b905092915050565b600060208201905081810360008301526130d081612cbb565b9050919050565b600060208201905081810360008301526130f081612cde565b9050919050565b6000602082019050818103600083015261311081612d01565b9050919050565b6000602082019050818103600083015261313081612d24565b9050919050565b6000602082019050818103600083015261315081612d47565b9050919050565b6000602082019050818103600083015261317081612d6a565b9050919050565b6000602082019050818103600083015261319081612d8d565b9050919050565b600060208201905081810360008301526131b081612db0565b9050919050565b600060208201905081810360008301526131d081612dd3565b9050919050565b600060208201905081810360008301526131f081612df6565b9050919050565b6000602082019050818103600083015261321081612e19565b9050919050565b6000602082019050818103600083015261323081612e3c565b9050919050565b6000602082019050818103600083015261325081612e5f565b9050919050565b6000602082019050818103600083015261327081612e82565b9050919050565b6000602082019050818103600083015261329081612ea5565b9050919050565b600060208201905081810360008301526132b081612ec8565b9050919050565b600060208201905081810360008301526132d081612eeb565b9050919050565b600060208201905081810360008301526132f081612f0e565b9050919050565b6000602082019050818103600083015261331081612f31565b9050919050565b6000602082019050818103600083015261333081612f54565b9050919050565b6000602082019050818103600083015261335081612f77565b9050919050565b6000602082019050818103600083015261337081612f9a565b9050919050565b6000602082019050818103600083015261339081612fbd565b9050919050565b60006020820190506133ac6000830184612fe0565b92915050565b60006133bc6133cd565b90506133c88282613679565b919050565b6000604051905090565b600067ffffffffffffffff8211156133f2576133f16137e0565b5b6133fb82613823565b9050602081019050919050565b600067ffffffffffffffff821115613423576134226137e0565b5b61342c82613823565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613487826135fb565b9150613492836135fb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134c7576134c6613724565b5b828201905092915050565b60006134dd826135fb565b91506134e8836135fb565b9250826134f8576134f7613753565b5b828204905092915050565b600061350e826135fb565b9150613519836135fb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561355257613551613724565b5b828202905092915050565b6000613568826135fb565b9150613573836135fb565b92508282101561358657613585613724565b5b828203905092915050565b600061359c826135db565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613632578082015181840152602081019050613617565b83811115613641576000848401525b50505050565b6000600282049050600182168061365f57607f821691505b6020821081141561367357613672613782565b5b50919050565b61368282613823565b810181811067ffffffffffffffff821117156136a1576136a06137e0565b5b80604052505050565b60006136b5826135fb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136e8576136e7613724565b5b600182019050919050565b60006136fe826135fb565b9150613709836135fb565b92508261371957613718613753565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f41626f7665206d6178696d756d20737570706c79210000000000000000000000600082015250565b7f4d61782031302070657220747800000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e657720737570706c79206d757374206265206c657373207468616e2063757260008201527f72656e7420737570706c79000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e7420616d6f756e74206f6620657468657221000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b613e9881613591565b8114613ea357600080fd5b50565b613eaf816135a3565b8114613eba57600080fd5b50565b613ec6816135af565b8114613ed157600080fd5b50565b613edd816135fb565b8114613ee857600080fd5b5056fea2646970667358221220878b39d3ba44b75981e078fd7f0343db9857e0b7831ec1c46d2a07fac6b76e6764736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569636b64743761696d6b6d68686e6e3466357371616732653570617667776863366b6476346c61347778666e75636a706b746664712f0000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061019c5760003560e01c8063715018a6116100ec578063b88d4fde1161008a578063e985e9c511610064578063e985e9c5146105b9578063ee8cdd4e146105f6578063f2fde38b1461061f578063f4c44569146106485761019c565b8063b88d4fde14610528578063c87b56dd14610551578063d5abeb011461058e5761019c565b806395d89b41116100c657806395d89b411461048d578063a035b1fe146104b8578063a0712d68146104e3578063a22cb465146104ff5761019c565b8063715018a614610434578063853828b61461044b5780638da5cb5b146104625761019c565b806323b872dd116101595780634f6ccce7116101335780634f6ccce71461035457806355f804b3146103915780636352211e146103ba57806370a08231146103f75761019c565b806323b872dd146102c55780632f745c59146102ee57806342842e0e1461032b5761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b3146102465780631370128e1461026f57806318160ddd1461029a575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612b2a565b610671565b6040516101d5919061307a565b60405180910390f35b3480156101ea57600080fd5b506101f36107bb565b6040516102009190613095565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612bcd565b61084d565b60405161023d9190613013565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190612aea565b6108d2565b005b34801561027b57600080fd5b506102846109eb565b6040516102919190613397565b60405180910390f35b3480156102a657600080fd5b506102af6109f1565b6040516102bc9190613397565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e791906129d4565b6109fa565b005b3480156102fa57600080fd5b5061031560048036038101906103109190612aea565b610a0a565b6040516103229190613397565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d91906129d4565b610bfc565b005b34801561036057600080fd5b5061037b60048036038101906103769190612bcd565b610c1c565b6040516103889190613397565b60405180910390f35b34801561039d57600080fd5b506103b860048036038101906103b39190612b84565b610c6f565b005b3480156103c657600080fd5b506103e160048036038101906103dc9190612bcd565b610d05565b6040516103ee9190613013565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190612967565b610d1b565b60405161042b9190613397565b60405180910390f35b34801561044057600080fd5b50610449610e04565b005b34801561045757600080fd5b50610460610e8c565b005b34801561046e57600080fd5b50610477610f5e565b6040516104849190613013565b60405180910390f35b34801561049957600080fd5b506104a2610f88565b6040516104af9190613095565b60405180910390f35b3480156104c457600080fd5b506104cd61101a565b6040516104da9190613397565b60405180910390f35b6104fd60048036038101906104f89190612bcd565b611020565b005b34801561050b57600080fd5b5061052660048036038101906105219190612aaa565b6111b2565b005b34801561053457600080fd5b5061054f600480360381019061054a9190612a27565b611333565b005b34801561055d57600080fd5b5061057860048036038101906105739190612bcd565b61138f565b6040516105859190613095565b60405180910390f35b34801561059a57600080fd5b506105a3611437565b6040516105b09190613397565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190612994565b61143d565b6040516105ed919061307a565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190612bcd565b6114d1565b005b34801561062b57600080fd5b5061064660048036038101906106419190612967565b611557565b005b34801561065457600080fd5b5061066f600480360381019061066a9190612bcd565b61164f565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061073c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107a457507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107b457506107b382611719565b5b9050919050565b6060600180546107ca90613647565b80601f01602080910402602001604051908101604052809291908181526020018280546107f690613647565b80156108435780601f1061081857610100808354040283529160200191610843565b820191906000526020600020905b81548152906001019060200180831161082657829003601f168201915b5050505050905090565b600061085882611783565b610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e90613377565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108dd82610d05565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561094e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610945906132b7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661096d611790565b73ffffffffffffffffffffffffffffffffffffffff16148061099c575061099b81610996611790565b61143d565b5b6109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d2906131d7565b60405180910390fd5b6109e6838383611798565b505050565b61029a81565b60008054905090565b610a0583838361184a565b505050565b6000610a1583610d1b565b8210610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d906130b7565b60405180910390fd5b6000610a606109f1565b905060008060005b83811015610bba576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610b5a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bac5786841415610ba3578195505050505050610bf6565b83806001019450505b508080600101915050610a68565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bed90613337565b60405180910390fd5b92915050565b610c1783838360405180602001604052806000815250611333565b505050565b6000610c266109f1565b8210610c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5e90613197565b60405180910390fd5b819050919050565b610c77611790565b73ffffffffffffffffffffffffffffffffffffffff16610c95610f5e565b73ffffffffffffffffffffffffffffffffffffffff1614610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290613237565b60405180910390fd5b8060089080519060200190610d01929190612741565b5050565b6000610d1082611d8a565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d83906131f7565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610e0c611790565b73ffffffffffffffffffffffffffffffffffffffff16610e2a610f5e565b73ffffffffffffffffffffffffffffffffffffffff1614610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7790613237565b60405180910390fd5b610e8a6000611f24565b565b610e94611790565b73ffffffffffffffffffffffffffffffffffffffff16610eb2610f5e565b73ffffffffffffffffffffffffffffffffffffffff1614610f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eff90613237565b60405180910390fd5b6000479050610f15610f5e565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610f5a573d6000803e3d6000fd5b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610f9790613647565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc390613647565b80156110105780601f10610fe557610100808354040283529160200191611010565b820191906000526020600020905b815481529060010190602001808311610ff357829003601f168201915b5050505050905090565b600a5481565b600a811115611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b906130f7565b60405180910390fd5b600061106e6109f1565b9050600954828261107f919061347c565b11156110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b7906130d7565b60405180910390fd5b61029a811061111e573482600a546110d89190613503565b1115611119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111090613177565b60405180910390fd5b61119d565b61029a828261112d919061347c565b111561119c573461029a8383611143919061347c565b61114d919061355d565b600a5461115a9190613503565b111561119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119290613177565b60405180910390fd5b5b5b6111ae6111a8611790565b83611fea565b5050565b6111ba611790565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f90613277565b60405180910390fd5b8060066000611235611790565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166112e2611790565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611327919061307a565b60405180910390a35050565b61133e84848461184a565b61134a84848484612008565b611389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611380906132d7565b60405180910390fd5b50505050565b606061139a82611783565b6113d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d090613257565b60405180910390fd5b60006113e361219f565b9050600081511415611404576040518060200160405280600081525061142f565b8061140e84612231565b60405160200161141f929190612fef565b6040516020818303038152906040525b915050919050565b60095481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114d9611790565b73ffffffffffffffffffffffffffffffffffffffff166114f7610f5e565b73ffffffffffffffffffffffffffffffffffffffff161461154d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154490613237565b60405180910390fd5b80600a8190555050565b61155f611790565b73ffffffffffffffffffffffffffffffffffffffff1661157d610f5e565b73ffffffffffffffffffffffffffffffffffffffff16146115d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ca90613237565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a90613117565b60405180910390fd5b61164c81611f24565b50565b611657611790565b73ffffffffffffffffffffffffffffffffffffffff16611675610f5e565b73ffffffffffffffffffffffffffffffffffffffff16146116cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c290613237565b60405180910390fd5b600954811061170f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170690613137565b60405180910390fd5b8060098190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061185582611d8a565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661187c611790565b73ffffffffffffffffffffffffffffffffffffffff1614806118d857506118a1611790565b73ffffffffffffffffffffffffffffffffffffffff166118c08461084d565b73ffffffffffffffffffffffffffffffffffffffff16145b806118f457506118f382600001516118ee611790565b61143d565b5b905080611936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192d90613297565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146119a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199f90613217565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0f906131b7565b60405180910390fd5b611a258585856001612392565b611a356000848460000151611798565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d1a57611c7981611783565b15611d195782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d838585856001612398565b5050505050565b611d926127c7565b611d9b82611783565b611dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd190613157565b60405180910390fd5b60008290505b60008110611ee3576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611ed4578092505050611f1f565b50808060019003915050611de0565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1690613357565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61200482826040518060200160405280600081525061239e565b5050565b60006120298473ffffffffffffffffffffffffffffffffffffffff166123b0565b15612192578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612052611790565b8786866040518563ffffffff1660e01b8152600401612074949392919061302e565b602060405180830381600087803b15801561208e57600080fd5b505af19250505080156120bf57506040513d601f19601f820116820180604052508101906120bc9190612b57565b60015b612142573d80600081146120ef576040519150601f19603f3d011682016040523d82523d6000602084013e6120f4565b606091505b5060008151141561213a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612131906132d7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612197565b600190505b949350505050565b6060600880546121ae90613647565b80601f01602080910402602001604051908101604052809291908181526020018280546121da90613647565b80156122275780601f106121fc57610100808354040283529160200191612227565b820191906000526020600020905b81548152906001019060200180831161220a57829003601f168201915b5050505050905090565b60606000821415612279576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061238d565b600082905060005b600082146122ab578080612294906136aa565b915050600a826122a491906134d2565b9150612281565b60008167ffffffffffffffff8111156122c7576122c66137e0565b5b6040519080825280601f01601f1916602001820160405280156122f95781602001600182028036833780820191505090505b5090505b6000851461238657600182612312919061355d565b9150600a8561232191906136f3565b603061232d919061347c565b60f81b818381518110612343576123426137b1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561237f91906134d2565b94506122fd565b8093505050505b919050565b50505050565b50505050565b6123ab83838360016123c3565b505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612430906132f7565b60405180910390fd5b600084141561247d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247490613317565b60405180910390fd5b61248a6000868387612392565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561272457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4831561270f576126cf6000888488612008565b61270e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612705906132d7565b60405180910390fd5b5b81806001019250508080600101915050612658565b50806000819055505061273a6000868387612398565b5050505050565b82805461274d90613647565b90600052602060002090601f01602090048101928261276f57600085556127b6565b82601f1061278857805160ff19168380011785556127b6565b828001600101855582156127b6579182015b828111156127b557825182559160200191906001019061279a565b5b5090506127c39190612801565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561281a576000816000905550600101612802565b5090565b600061283161282c846133d7565b6133b2565b90508281526020810184848401111561284d5761284c613814565b5b612858848285613605565b509392505050565b600061287361286e84613408565b6133b2565b90508281526020810184848401111561288f5761288e613814565b5b61289a848285613605565b509392505050565b6000813590506128b181613e8f565b92915050565b6000813590506128c681613ea6565b92915050565b6000813590506128db81613ebd565b92915050565b6000815190506128f081613ebd565b92915050565b600082601f83011261290b5761290a61380f565b5b813561291b84826020860161281e565b91505092915050565b600082601f8301126129395761293861380f565b5b8135612949848260208601612860565b91505092915050565b60008135905061296181613ed4565b92915050565b60006020828403121561297d5761297c61381e565b5b600061298b848285016128a2565b91505092915050565b600080604083850312156129ab576129aa61381e565b5b60006129b9858286016128a2565b92505060206129ca858286016128a2565b9150509250929050565b6000806000606084860312156129ed576129ec61381e565b5b60006129fb868287016128a2565b9350506020612a0c868287016128a2565b9250506040612a1d86828701612952565b9150509250925092565b60008060008060808587031215612a4157612a4061381e565b5b6000612a4f878288016128a2565b9450506020612a60878288016128a2565b9350506040612a7187828801612952565b925050606085013567ffffffffffffffff811115612a9257612a91613819565b5b612a9e878288016128f6565b91505092959194509250565b60008060408385031215612ac157612ac061381e565b5b6000612acf858286016128a2565b9250506020612ae0858286016128b7565b9150509250929050565b60008060408385031215612b0157612b0061381e565b5b6000612b0f858286016128a2565b9250506020612b2085828601612952565b9150509250929050565b600060208284031215612b4057612b3f61381e565b5b6000612b4e848285016128cc565b91505092915050565b600060208284031215612b6d57612b6c61381e565b5b6000612b7b848285016128e1565b91505092915050565b600060208284031215612b9a57612b9961381e565b5b600082013567ffffffffffffffff811115612bb857612bb7613819565b5b612bc484828501612924565b91505092915050565b600060208284031215612be357612be261381e565b5b6000612bf184828501612952565b91505092915050565b612c0381613591565b82525050565b612c12816135a3565b82525050565b6000612c2382613439565b612c2d818561344f565b9350612c3d818560208601613614565b612c4681613823565b840191505092915050565b6000612c5c82613444565b612c668185613460565b9350612c76818560208601613614565b612c7f81613823565b840191505092915050565b6000612c9582613444565b612c9f8185613471565b9350612caf818560208601613614565b80840191505092915050565b6000612cc8602283613460565b9150612cd382613834565b604082019050919050565b6000612ceb601583613460565b9150612cf682613883565b602082019050919050565b6000612d0e600d83613460565b9150612d19826138ac565b602082019050919050565b6000612d31602683613460565b9150612d3c826138d5565b604082019050919050565b6000612d54602b83613460565b9150612d5f82613924565b604082019050919050565b6000612d77602a83613460565b9150612d8282613973565b604082019050919050565b6000612d9a601d83613460565b9150612da5826139c2565b602082019050919050565b6000612dbd602383613460565b9150612dc8826139eb565b604082019050919050565b6000612de0602583613460565b9150612deb82613a3a565b604082019050919050565b6000612e03603983613460565b9150612e0e82613a89565b604082019050919050565b6000612e26602b83613460565b9150612e3182613ad8565b604082019050919050565b6000612e49602683613460565b9150612e5482613b27565b604082019050919050565b6000612e6c602083613460565b9150612e7782613b76565b602082019050919050565b6000612e8f602f83613460565b9150612e9a82613b9f565b604082019050919050565b6000612eb2601a83613460565b9150612ebd82613bee565b602082019050919050565b6000612ed5603283613460565b9150612ee082613c17565b604082019050919050565b6000612ef8602283613460565b9150612f0382613c66565b604082019050919050565b6000612f1b603383613460565b9150612f2682613cb5565b604082019050919050565b6000612f3e602183613460565b9150612f4982613d04565b604082019050919050565b6000612f61602883613460565b9150612f6c82613d53565b604082019050919050565b6000612f84602e83613460565b9150612f8f82613da2565b604082019050919050565b6000612fa7602f83613460565b9150612fb282613df1565b604082019050919050565b6000612fca602d83613460565b9150612fd582613e40565b604082019050919050565b612fe9816135fb565b82525050565b6000612ffb8285612c8a565b91506130078284612c8a565b91508190509392505050565b60006020820190506130286000830184612bfa565b92915050565b60006080820190506130436000830187612bfa565b6130506020830186612bfa565b61305d6040830185612fe0565b818103606083015261306f8184612c18565b905095945050505050565b600060208201905061308f6000830184612c09565b92915050565b600060208201905081810360008301526130af8184612c51565b905092915050565b600060208201905081810360008301526130d081612cbb565b9050919050565b600060208201905081810360008301526130f081612cde565b9050919050565b6000602082019050818103600083015261311081612d01565b9050919050565b6000602082019050818103600083015261313081612d24565b9050919050565b6000602082019050818103600083015261315081612d47565b9050919050565b6000602082019050818103600083015261317081612d6a565b9050919050565b6000602082019050818103600083015261319081612d8d565b9050919050565b600060208201905081810360008301526131b081612db0565b9050919050565b600060208201905081810360008301526131d081612dd3565b9050919050565b600060208201905081810360008301526131f081612df6565b9050919050565b6000602082019050818103600083015261321081612e19565b9050919050565b6000602082019050818103600083015261323081612e3c565b9050919050565b6000602082019050818103600083015261325081612e5f565b9050919050565b6000602082019050818103600083015261327081612e82565b9050919050565b6000602082019050818103600083015261329081612ea5565b9050919050565b600060208201905081810360008301526132b081612ec8565b9050919050565b600060208201905081810360008301526132d081612eeb565b9050919050565b600060208201905081810360008301526132f081612f0e565b9050919050565b6000602082019050818103600083015261331081612f31565b9050919050565b6000602082019050818103600083015261333081612f54565b9050919050565b6000602082019050818103600083015261335081612f77565b9050919050565b6000602082019050818103600083015261337081612f9a565b9050919050565b6000602082019050818103600083015261339081612fbd565b9050919050565b60006020820190506133ac6000830184612fe0565b92915050565b60006133bc6133cd565b90506133c88282613679565b919050565b6000604051905090565b600067ffffffffffffffff8211156133f2576133f16137e0565b5b6133fb82613823565b9050602081019050919050565b600067ffffffffffffffff821115613423576134226137e0565b5b61342c82613823565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613487826135fb565b9150613492836135fb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134c7576134c6613724565b5b828201905092915050565b60006134dd826135fb565b91506134e8836135fb565b9250826134f8576134f7613753565b5b828204905092915050565b600061350e826135fb565b9150613519836135fb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561355257613551613724565b5b828202905092915050565b6000613568826135fb565b9150613573836135fb565b92508282101561358657613585613724565b5b828203905092915050565b600061359c826135db565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613632578082015181840152602081019050613617565b83811115613641576000848401525b50505050565b6000600282049050600182168061365f57607f821691505b6020821081141561367357613672613782565b5b50919050565b61368282613823565b810181811067ffffffffffffffff821117156136a1576136a06137e0565b5b80604052505050565b60006136b5826135fb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136e8576136e7613724565b5b600182019050919050565b60006136fe826135fb565b9150613709836135fb565b92508261371957613718613753565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f41626f7665206d6178696d756d20737570706c79210000000000000000000000600082015250565b7f4d61782031302070657220747800000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e657720737570706c79206d757374206265206c657373207468616e2063757260008201527f72656e7420737570706c79000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e7420616d6f756e74206f6620657468657221000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b613e9881613591565b8114613ea357600080fd5b50565b613eaf816135a3565b8114613eba57600080fd5b50565b613ec6816135af565b8114613ed157600080fd5b50565b613edd816135fb565b8114613ee857600080fd5b5056fea2646970667358221220878b39d3ba44b75981e078fd7f0343db9857e0b7831ec1c46d2a07fac6b76e6764736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000043697066733a2f2f62616679626569636b64743761696d6b6d68686e6e3466357371616732653570617667776863366b6476346c61347778666e75636a706b746664712f0000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI_ (string): ipfs://bafybeickdt7aimkmhhnn4f5sqag2e5pavgwhc6kdv4la4wxfnucjpktfdq/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000043
Arg [2] : 697066733a2f2f62616679626569636b64743761696d6b6d68686e6e34663573
Arg [3] : 71616732653570617667776863366b6476346c61347778666e75636a706b7466
Arg [4] : 64712f0000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

41074:1518:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24449:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26335:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27897:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27418:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41192:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22706:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28773:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23370:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29006:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22883:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41394:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26144:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24885:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39284:103;;;;;;;;;;;;;:::i;:::-;;42336:145;;;;;;;;;;;;;:::i;:::-;;38633:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26504:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41233:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41500:534;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28183:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29254:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26679:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41154:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28542:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42042:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39542:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42143:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24449:372;24551:4;24603:25;24588:40;;;:11;:40;;;;:105;;;;24660:33;24645:48;;;:11;:48;;;;24588:105;:172;;;;24725:35;24710:50;;;:11;:50;;;;24588:172;:225;;;;24777:36;24801:11;24777:23;:36::i;:::-;24588:225;24568:245;;24449:372;;;:::o;26335:100::-;26389:13;26422:5;26415:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26335:100;:::o;27897:214::-;27965:7;27993:16;28001:7;27993;:16::i;:::-;27985:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28079:15;:24;28095:7;28079:24;;;;;;;;;;;;;;;;;;;;;28072:31;;27897:214;;;:::o;27418:413::-;27491:13;27507:24;27523:7;27507:15;:24::i;:::-;27491:40;;27556:5;27550:11;;:2;:11;;;;27542:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27651:5;27635:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27660:37;27677:5;27684:12;:10;:12::i;:::-;27660:16;:37::i;:::-;27635:62;27613:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;27795:28;27804:2;27808:7;27817:5;27795:8;:28::i;:::-;27480:351;27418:413;;:::o;41192:34::-;41223:3;41192:34;:::o;22706:100::-;22759:7;22786:12;;22779:19;;22706:100;:::o;28773:162::-;28899:28;28909:4;28915:2;28919:7;28899:9;:28::i;:::-;28773:162;;;:::o;23370:1007::-;23459:7;23495:16;23505:5;23495:9;:16::i;:::-;23487:5;:24;23479:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23561:22;23586:13;:11;:13::i;:::-;23561:38;;23610:19;23640:25;23829:9;23824:466;23844:14;23840:1;:18;23824:466;;;23884:31;23918:11;:14;23930:1;23918:14;;;;;;;;;;;23884:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23981:1;23955:28;;:9;:14;;;:28;;;23951:111;;24028:9;:14;;;24008:34;;23951:111;24105:5;24084:26;;:17;:26;;;24080:195;;;24154:5;24139:11;:20;24135:85;;;24195:1;24188:8;;;;;;;;;24135:85;24242:13;;;;;;;24080:195;23865:425;23860:3;;;;;;;23824:466;;;;24313:56;;;;;;;;;;:::i;:::-;;;;;;;;23370:1007;;;;;:::o;29006:177::-;29136:39;29153:4;29159:2;29163:7;29136:39;;;;;;;;;;;;:16;:39::i;:::-;29006:177;;;:::o;22883:187::-;22950:7;22986:13;:11;:13::i;:::-;22978:5;:21;22970:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23057:5;23050:12;;22883:187;;;:::o;41394:98::-;38864:12;:10;:12::i;:::-;38853:23;;:7;:5;:7::i;:::-;:23;;;38845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41476:8:::1;41466:7;:18;;;;;;;;;;;;:::i;:::-;;41394:98:::0;:::o;26144:124::-;26208:7;26235:20;26247:7;26235:11;:20::i;:::-;:25;;;26228:32;;26144:124;;;:::o;24885:221::-;24949:7;24994:1;24977:19;;:5;:19;;;;24969:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25070:12;:19;25083:5;25070:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;25062:36;;25055:43;;24885:221;;;:::o;39284:103::-;38864:12;:10;:12::i;:::-;38853:23;;:7;:5;:7::i;:::-;:23;;;38845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39349:30:::1;39376:1;39349:18;:30::i;:::-;39284:103::o:0;42336:145::-;38864:12;:10;:12::i;:::-;38853:23;;:7;:5;:7::i;:::-;:23;;;38845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42389:15:::1;42407:21;42389:39;;42447:7;:5;:7::i;:::-;42439:25;;:34;42465:7;42439:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42378:103;42336:145::o:0;38633:87::-;38679:7;38706:6;;;;;;;;;;;38699:13;;38633:87;:::o;26504:104::-;26560:13;26593:7;26586:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26504:104;:::o;41233:36::-;;;;:::o;41500:534::-;41576:2;41566:6;:12;;41558:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;41607:14;41624:13;:11;:13::i;:::-;41607:30;;41675:9;;41665:6;41656;:15;;;;:::i;:::-;:28;;41648:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;41223:3;41725:6;:14;41721:264;;41782:9;41772:6;41764:5;;:14;;;;:::i;:::-;:27;;41756:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;41721:264;;;41223:3;41856:6;41847;:15;;;;:::i;:::-;:22;41843:142;;;41930:9;41223:3;41912:6;41903;:15;;;;:::i;:::-;:22;;;;:::i;:::-;41894:5;;:32;;;;:::i;:::-;:45;;41886:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;41843:142;41721:264;41995:31;42005:12;:10;:12::i;:::-;42019:6;41995:9;:31::i;:::-;41547:487;41500:534;:::o;28183:288::-;28290:12;:10;:12::i;:::-;28278:24;;:8;:24;;;;28270:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28391:8;28346:18;:32;28365:12;:10;:12::i;:::-;28346:32;;;;;;;;;;;;;;;:42;28379:8;28346:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28444:8;28415:48;;28430:12;:10;:12::i;:::-;28415:48;;;28454:8;28415:48;;;;;;:::i;:::-;;;;;;;;28183:288;;:::o;29254:355::-;29413:28;29423:4;29429:2;29433:7;29413:9;:28::i;:::-;29474:48;29497:4;29503:2;29507:7;29516:5;29474:22;:48::i;:::-;29452:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;29254:355;;;;:::o;26679:335::-;26752:13;26786:16;26794:7;26786;:16::i;:::-;26778:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26867:21;26891:10;:8;:10::i;:::-;26867:34;;26944:1;26925:7;26919:21;:26;;:87;;;;;;;;;;;;;;;;;26972:7;26981:18;:7;:16;:18::i;:::-;26955:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26919:87;26912:94;;;26679:335;;;:::o;41154:31::-;;;;:::o;28542:164::-;28639:4;28663:18;:25;28682:5;28663:25;;;;;;;;;;;;;;;:35;28689:8;28663:35;;;;;;;;;;;;;;;;;;;;;;;;;28656:42;;28542:164;;;;:::o;42042:93::-;38864:12;:10;:12::i;:::-;38853:23;;:7;:5;:7::i;:::-;:23;;;38845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42119:8:::1;42111:5;:16;;;;42042:93:::0;:::o;39542:201::-;38864:12;:10;:12::i;:::-;38853:23;;:7;:5;:7::i;:::-;:23;;;38845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39651:1:::1;39631:22;;:8;:22;;;;39623:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;39707:28;39726:8;39707:18;:28::i;:::-;39542:201:::0;:::o;42143:185::-;38864:12;:10;:12::i;:::-;38853:23;;:7;:5;:7::i;:::-;:23;;;38845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42231:9:::1;;42219;:21;42211:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;42311:9;42299;:21;;;;42143:185:::0;:::o;13088:157::-;13173:4;13212:25;13197:40;;;:11;:40;;;;13190:47;;13088:157;;;:::o;29864:111::-;29921:4;29955:12;;29945:7;:22;29938:29;;29864:111;;;:::o;20679:98::-;20732:7;20759:10;20752:17;;20679:98;:::o;34784:196::-;34926:2;34899:15;:24;34915:7;34899:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34964:7;34960:2;34944:28;;34953:5;34944:28;;;;;;;;;;;;34784:196;;;:::o;32664:2002::-;32779:35;32817:20;32829:7;32817:11;:20::i;:::-;32779:58;;32850:22;32892:13;:18;;;32876:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;32951:12;:10;:12::i;:::-;32927:36;;:20;32939:7;32927:11;:20::i;:::-;:36;;;32876:87;:154;;;;32980:50;32997:13;:18;;;33017:12;:10;:12::i;:::-;32980:16;:50::i;:::-;32876:154;32850:181;;33052:17;33044:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;33167:4;33145:26;;:13;:18;;;:26;;;33137:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33247:1;33233:16;;:2;:16;;;;33225:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33304:43;33326:4;33332:2;33336:7;33345:1;33304:21;:43::i;:::-;33412:49;33429:1;33433:7;33442:13;:18;;;33412:8;:49::i;:::-;33787:1;33757:12;:18;33770:4;33757:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33831:1;33803:12;:16;33816:2;33803:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33877:2;33849:11;:20;33861:7;33849:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;33939:15;33894:11;:20;33906:7;33894:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;34207:19;34239:1;34229:7;:11;34207:33;;34300:1;34259:43;;:11;:24;34271:11;34259:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;34255:295;;;34327:20;34335:11;34327:7;:20::i;:::-;34323:212;;;34404:13;:18;;;34372:11;:24;34384:11;34372:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;34487:13;:28;;;34445:11;:24;34457:11;34445:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;34323:212;34255:295;33732:829;34597:7;34593:2;34578:27;;34587:4;34578:27;;;;;;;;;;;;34616:42;34637:4;34643:2;34647:7;34656:1;34616:20;:42::i;:::-;32768:1898;;32664:2002;;;:::o;25545:537::-;25606:21;;:::i;:::-;25648:16;25656:7;25648;:16::i;:::-;25640:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25754:12;25769:7;25754:22;;25749:245;25786:1;25778:4;:9;25749:245;;25816:31;25850:11;:17;25862:4;25850:17;;;;;;;;;;;25816:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25916:1;25890:28;;:9;:14;;;:28;;;25886:93;;25950:9;25943:16;;;;;;25886:93;25797:197;25789:6;;;;;;;;25749:245;;;;26017:57;;;;;;;;;;:::i;:::-;;;;;;;;25545:537;;;;:::o;39903:191::-;39977:16;39996:6;;;;;;;;;;;39977:25;;40022:8;40013:6;;:17;;;;;;;;;;;;;;;;;;40077:8;40046:40;;40067:8;40046:40;;;;;;;;;;;;39966:128;39903:191;:::o;29983:104::-;30052:27;30062:2;30066:8;30052:27;;;;;;;;;;;;:9;:27::i;:::-;29983:104;;:::o;35545:804::-;35700:4;35721:15;:2;:13;;;:15::i;:::-;35717:625;;;35773:2;35757:36;;;35794:12;:10;:12::i;:::-;35808:4;35814:7;35823:5;35757:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35753:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36020:1;36003:6;:13;:18;35999:273;;;36046:61;;;;;;;;;;:::i;:::-;;;;;;;;35999:273;36222:6;36216:13;36207:6;36203:2;36199:15;36192:38;35753:534;35890:45;;;35880:55;;;:6;:55;;;;35873:62;;;;;35717:625;36326:4;36319:11;;35545:804;;;;;;;:::o;42489:100::-;42541:13;42574:7;42567:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42489:100;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;36837:159::-;;;;;:::o;37408:158::-;;;;;:::o;30450:163::-;30573:32;30579:2;30583:8;30593:5;30600:4;30573:5;:32::i;:::-;30450:163;;;:::o;2944:387::-;3004:4;3212:12;3279:7;3267:20;3259:28;;3322:1;3315:4;:8;3308:15;;;2944:387;;;:::o;30872:1538::-;31011:20;31034:12;;31011:35;;31079:1;31065:16;;:2;:16;;;;31057:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31150:1;31138:8;:13;;31130:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31209:61;31239:1;31243:2;31247:12;31261:8;31209:21;:61::i;:::-;31584:8;31548:12;:16;31561:2;31548:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31649:8;31608:12;:16;31621:2;31608:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31708:2;31675:11;:25;31687:12;31675:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;31775:15;31725:11;:25;31737:12;31725:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;31808:20;31831:12;31808:35;;31865:9;31860:415;31880:8;31876:1;:12;31860:415;;;31944:12;31940:2;31919:38;;31936:1;31919:38;;;;;;;;;;;;31980:4;31976:249;;;32043:59;32074:1;32078:2;32082:12;32096:5;32043:22;:59::i;:::-;32009:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;31976:249;32245:14;;;;;;;31890:3;;;;;;;31860:415;;;;32306:12;32291;:27;;;;31523:807;32342:60;32371:1;32375:2;32379:12;32393:8;32342:20;:60::i;:::-;31000:1410;30872:1538;;;;:::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:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:118::-;7245:24;7263:5;7245:24;:::i;:::-;7240:3;7233:37;7158:118;;:::o;7282:109::-;7363:21;7378:5;7363:21;:::i;:::-;7358:3;7351:34;7282:109;;:::o;7397:360::-;7483:3;7511:38;7543:5;7511:38;:::i;:::-;7565:70;7628:6;7623:3;7565:70;:::i;:::-;7558:77;;7644:52;7689:6;7684:3;7677:4;7670:5;7666:16;7644:52;:::i;:::-;7721:29;7743:6;7721:29;:::i;:::-;7716:3;7712:39;7705:46;;7487:270;7397:360;;;;:::o;7763:364::-;7851:3;7879:39;7912:5;7879:39;:::i;:::-;7934:71;7998:6;7993:3;7934:71;:::i;:::-;7927:78;;8014:52;8059:6;8054:3;8047:4;8040:5;8036:16;8014:52;:::i;:::-;8091:29;8113:6;8091:29;:::i;:::-;8086:3;8082:39;8075:46;;7855:272;7763:364;;;;:::o;8133:377::-;8239:3;8267:39;8300:5;8267:39;:::i;:::-;8322:89;8404:6;8399:3;8322:89;:::i;:::-;8315:96;;8420:52;8465:6;8460:3;8453:4;8446:5;8442:16;8420:52;:::i;:::-;8497:6;8492:3;8488:16;8481:23;;8243:267;8133:377;;;;:::o;8516:366::-;8658:3;8679:67;8743:2;8738:3;8679:67;:::i;:::-;8672:74;;8755:93;8844:3;8755:93;:::i;:::-;8873:2;8868:3;8864:12;8857:19;;8516:366;;;:::o;8888:::-;9030:3;9051:67;9115:2;9110:3;9051:67;:::i;:::-;9044:74;;9127:93;9216:3;9127:93;:::i;:::-;9245:2;9240:3;9236:12;9229:19;;8888:366;;;:::o;9260:::-;9402:3;9423:67;9487:2;9482:3;9423:67;:::i;:::-;9416:74;;9499:93;9588:3;9499:93;:::i;:::-;9617:2;9612:3;9608:12;9601:19;;9260:366;;;:::o;9632:::-;9774:3;9795:67;9859:2;9854:3;9795:67;:::i;:::-;9788:74;;9871:93;9960:3;9871:93;:::i;:::-;9989:2;9984:3;9980:12;9973:19;;9632:366;;;:::o;10004:::-;10146:3;10167:67;10231:2;10226:3;10167:67;:::i;:::-;10160:74;;10243:93;10332:3;10243:93;:::i;:::-;10361:2;10356:3;10352:12;10345:19;;10004:366;;;:::o;10376:::-;10518:3;10539:67;10603:2;10598:3;10539:67;:::i;:::-;10532:74;;10615:93;10704:3;10615:93;:::i;:::-;10733:2;10728:3;10724:12;10717:19;;10376:366;;;:::o;10748:::-;10890:3;10911:67;10975:2;10970:3;10911:67;:::i;:::-;10904:74;;10987:93;11076:3;10987:93;:::i;:::-;11105:2;11100:3;11096:12;11089:19;;10748:366;;;:::o;11120:::-;11262:3;11283:67;11347:2;11342:3;11283:67;:::i;:::-;11276:74;;11359:93;11448:3;11359:93;:::i;:::-;11477:2;11472:3;11468:12;11461:19;;11120:366;;;:::o;11492:::-;11634:3;11655:67;11719:2;11714:3;11655:67;:::i;:::-;11648:74;;11731:93;11820:3;11731:93;:::i;:::-;11849:2;11844:3;11840:12;11833:19;;11492:366;;;:::o;11864:::-;12006:3;12027:67;12091:2;12086:3;12027:67;:::i;:::-;12020:74;;12103:93;12192:3;12103:93;:::i;:::-;12221:2;12216:3;12212:12;12205:19;;11864:366;;;:::o;12236:::-;12378:3;12399:67;12463:2;12458:3;12399:67;:::i;:::-;12392:74;;12475:93;12564:3;12475:93;:::i;:::-;12593:2;12588:3;12584:12;12577:19;;12236:366;;;:::o;12608:::-;12750:3;12771:67;12835:2;12830:3;12771:67;:::i;:::-;12764:74;;12847:93;12936:3;12847:93;:::i;:::-;12965:2;12960:3;12956:12;12949:19;;12608:366;;;:::o;12980:::-;13122:3;13143:67;13207:2;13202:3;13143:67;:::i;:::-;13136:74;;13219:93;13308:3;13219:93;:::i;:::-;13337:2;13332:3;13328:12;13321:19;;12980:366;;;:::o;13352:::-;13494:3;13515:67;13579:2;13574:3;13515:67;:::i;:::-;13508:74;;13591:93;13680:3;13591:93;:::i;:::-;13709:2;13704:3;13700:12;13693:19;;13352:366;;;:::o;13724:::-;13866:3;13887:67;13951:2;13946:3;13887:67;:::i;:::-;13880:74;;13963:93;14052:3;13963:93;:::i;:::-;14081:2;14076:3;14072:12;14065:19;;13724:366;;;:::o;14096:::-;14238:3;14259:67;14323:2;14318:3;14259:67;:::i;:::-;14252:74;;14335:93;14424:3;14335:93;:::i;:::-;14453:2;14448:3;14444:12;14437:19;;14096:366;;;:::o;14468:::-;14610:3;14631:67;14695:2;14690:3;14631:67;:::i;:::-;14624:74;;14707:93;14796:3;14707:93;:::i;:::-;14825:2;14820:3;14816:12;14809:19;;14468:366;;;:::o;14840:::-;14982:3;15003:67;15067:2;15062:3;15003:67;:::i;:::-;14996:74;;15079:93;15168:3;15079:93;:::i;:::-;15197:2;15192:3;15188:12;15181:19;;14840:366;;;:::o;15212:::-;15354:3;15375:67;15439:2;15434:3;15375:67;:::i;:::-;15368:74;;15451:93;15540:3;15451:93;:::i;:::-;15569:2;15564:3;15560:12;15553:19;;15212:366;;;:::o;15584:::-;15726:3;15747:67;15811:2;15806:3;15747:67;:::i;:::-;15740:74;;15823:93;15912:3;15823:93;:::i;:::-;15941:2;15936:3;15932:12;15925:19;;15584:366;;;:::o;15956:::-;16098:3;16119:67;16183:2;16178:3;16119:67;:::i;:::-;16112:74;;16195:93;16284:3;16195:93;:::i;:::-;16313:2;16308:3;16304:12;16297:19;;15956:366;;;:::o;16328:::-;16470:3;16491:67;16555:2;16550:3;16491:67;:::i;:::-;16484:74;;16567:93;16656:3;16567:93;:::i;:::-;16685:2;16680:3;16676:12;16669:19;;16328:366;;;:::o;16700:::-;16842:3;16863:67;16927:2;16922:3;16863:67;:::i;:::-;16856:74;;16939:93;17028:3;16939:93;:::i;:::-;17057:2;17052:3;17048:12;17041:19;;16700:366;;;:::o;17072:118::-;17159:24;17177:5;17159:24;:::i;:::-;17154:3;17147:37;17072:118;;:::o;17196:435::-;17376:3;17398:95;17489:3;17480:6;17398:95;:::i;:::-;17391:102;;17510:95;17601:3;17592:6;17510:95;:::i;:::-;17503:102;;17622:3;17615:10;;17196:435;;;;;:::o;17637:222::-;17730:4;17768:2;17757:9;17753:18;17745:26;;17781:71;17849:1;17838:9;17834:17;17825:6;17781:71;:::i;:::-;17637:222;;;;:::o;17865:640::-;18060:4;18098:3;18087:9;18083:19;18075:27;;18112:71;18180:1;18169:9;18165:17;18156:6;18112:71;:::i;:::-;18193:72;18261:2;18250:9;18246:18;18237:6;18193:72;:::i;:::-;18275;18343:2;18332:9;18328:18;18319:6;18275:72;:::i;:::-;18394:9;18388:4;18384:20;18379:2;18368:9;18364:18;18357:48;18422:76;18493:4;18484:6;18422:76;:::i;:::-;18414:84;;17865:640;;;;;;;:::o;18511:210::-;18598:4;18636:2;18625:9;18621:18;18613:26;;18649:65;18711:1;18700:9;18696:17;18687:6;18649:65;:::i;:::-;18511:210;;;;:::o;18727:313::-;18840:4;18878:2;18867:9;18863:18;18855:26;;18927:9;18921:4;18917:20;18913:1;18902:9;18898:17;18891:47;18955:78;19028:4;19019:6;18955:78;:::i;:::-;18947:86;;18727:313;;;;:::o;19046:419::-;19212:4;19250:2;19239:9;19235:18;19227:26;;19299:9;19293:4;19289:20;19285:1;19274:9;19270:17;19263:47;19327:131;19453:4;19327:131;:::i;:::-;19319:139;;19046:419;;;:::o;19471:::-;19637:4;19675:2;19664:9;19660:18;19652:26;;19724:9;19718:4;19714:20;19710:1;19699:9;19695:17;19688:47;19752:131;19878:4;19752:131;:::i;:::-;19744:139;;19471:419;;;:::o;19896:::-;20062:4;20100:2;20089:9;20085:18;20077:26;;20149:9;20143:4;20139:20;20135:1;20124:9;20120:17;20113:47;20177:131;20303:4;20177:131;:::i;:::-;20169:139;;19896:419;;;:::o;20321:::-;20487:4;20525:2;20514:9;20510:18;20502:26;;20574:9;20568:4;20564:20;20560:1;20549:9;20545:17;20538:47;20602:131;20728:4;20602:131;:::i;:::-;20594:139;;20321:419;;;:::o;20746:::-;20912:4;20950:2;20939:9;20935:18;20927:26;;20999:9;20993:4;20989:20;20985:1;20974:9;20970:17;20963:47;21027:131;21153:4;21027:131;:::i;:::-;21019:139;;20746:419;;;:::o;21171:::-;21337:4;21375:2;21364:9;21360:18;21352:26;;21424:9;21418:4;21414:20;21410:1;21399:9;21395:17;21388:47;21452:131;21578:4;21452:131;:::i;:::-;21444:139;;21171:419;;;:::o;21596:::-;21762:4;21800:2;21789:9;21785:18;21777:26;;21849:9;21843:4;21839:20;21835:1;21824:9;21820:17;21813:47;21877:131;22003:4;21877:131;:::i;:::-;21869:139;;21596:419;;;:::o;22021:::-;22187:4;22225:2;22214:9;22210:18;22202:26;;22274:9;22268:4;22264:20;22260:1;22249:9;22245:17;22238:47;22302:131;22428:4;22302:131;:::i;:::-;22294:139;;22021:419;;;:::o;22446:::-;22612:4;22650:2;22639:9;22635:18;22627:26;;22699:9;22693:4;22689:20;22685:1;22674:9;22670:17;22663:47;22727:131;22853:4;22727:131;:::i;:::-;22719:139;;22446:419;;;:::o;22871:::-;23037:4;23075:2;23064:9;23060:18;23052:26;;23124:9;23118:4;23114:20;23110:1;23099:9;23095:17;23088:47;23152:131;23278:4;23152:131;:::i;:::-;23144:139;;22871:419;;;:::o;23296:::-;23462:4;23500:2;23489:9;23485:18;23477:26;;23549:9;23543:4;23539:20;23535:1;23524:9;23520:17;23513:47;23577:131;23703:4;23577:131;:::i;:::-;23569:139;;23296:419;;;:::o;23721:::-;23887:4;23925:2;23914:9;23910:18;23902:26;;23974:9;23968:4;23964:20;23960:1;23949:9;23945:17;23938:47;24002:131;24128:4;24002:131;:::i;:::-;23994:139;;23721:419;;;:::o;24146:::-;24312:4;24350:2;24339:9;24335:18;24327:26;;24399:9;24393:4;24389:20;24385:1;24374:9;24370:17;24363:47;24427:131;24553:4;24427:131;:::i;:::-;24419:139;;24146:419;;;:::o;24571:::-;24737:4;24775:2;24764:9;24760:18;24752:26;;24824:9;24818:4;24814:20;24810:1;24799:9;24795:17;24788:47;24852:131;24978:4;24852:131;:::i;:::-;24844:139;;24571:419;;;:::o;24996:::-;25162:4;25200:2;25189:9;25185:18;25177:26;;25249:9;25243:4;25239:20;25235:1;25224:9;25220:17;25213:47;25277:131;25403:4;25277:131;:::i;:::-;25269:139;;24996:419;;;:::o;25421:::-;25587:4;25625:2;25614:9;25610:18;25602:26;;25674:9;25668:4;25664:20;25660:1;25649:9;25645:17;25638:47;25702:131;25828:4;25702:131;:::i;:::-;25694:139;;25421:419;;;:::o;25846:::-;26012:4;26050:2;26039:9;26035:18;26027:26;;26099:9;26093:4;26089:20;26085:1;26074:9;26070:17;26063:47;26127:131;26253:4;26127:131;:::i;:::-;26119:139;;25846:419;;;:::o;26271:::-;26437:4;26475:2;26464:9;26460:18;26452:26;;26524:9;26518:4;26514:20;26510:1;26499:9;26495:17;26488:47;26552:131;26678:4;26552:131;:::i;:::-;26544:139;;26271:419;;;:::o;26696:::-;26862:4;26900:2;26889:9;26885:18;26877:26;;26949:9;26943:4;26939:20;26935:1;26924:9;26920:17;26913:47;26977:131;27103:4;26977:131;:::i;:::-;26969:139;;26696:419;;;:::o;27121:::-;27287:4;27325:2;27314:9;27310:18;27302:26;;27374:9;27368:4;27364:20;27360:1;27349:9;27345:17;27338:47;27402:131;27528:4;27402:131;:::i;:::-;27394:139;;27121:419;;;:::o;27546:::-;27712:4;27750:2;27739:9;27735:18;27727:26;;27799:9;27793:4;27789:20;27785:1;27774:9;27770:17;27763:47;27827:131;27953:4;27827:131;:::i;:::-;27819:139;;27546:419;;;:::o;27971:::-;28137:4;28175:2;28164:9;28160:18;28152:26;;28224:9;28218:4;28214:20;28210:1;28199:9;28195:17;28188:47;28252:131;28378:4;28252:131;:::i;:::-;28244:139;;27971:419;;;:::o;28396:::-;28562:4;28600:2;28589:9;28585:18;28577:26;;28649:9;28643:4;28639:20;28635:1;28624:9;28620:17;28613:47;28677:131;28803:4;28677:131;:::i;:::-;28669:139;;28396:419;;;:::o;28821:222::-;28914:4;28952:2;28941:9;28937:18;28929:26;;28965:71;29033:1;29022:9;29018:17;29009:6;28965:71;:::i;:::-;28821:222;;;;:::o;29049:129::-;29083:6;29110:20;;:::i;:::-;29100:30;;29139:33;29167:4;29159:6;29139:33;:::i;:::-;29049:129;;;:::o;29184:75::-;29217:6;29250:2;29244:9;29234:19;;29184:75;:::o;29265:307::-;29326:4;29416:18;29408:6;29405:30;29402:56;;;29438:18;;:::i;:::-;29402:56;29476:29;29498:6;29476:29;:::i;:::-;29468:37;;29560:4;29554;29550:15;29542:23;;29265:307;;;:::o;29578:308::-;29640:4;29730:18;29722:6;29719:30;29716:56;;;29752:18;;:::i;:::-;29716:56;29790:29;29812:6;29790:29;:::i;:::-;29782:37;;29874:4;29868;29864:15;29856:23;;29578:308;;;:::o;29892:98::-;29943:6;29977:5;29971:12;29961:22;;29892:98;;;:::o;29996:99::-;30048:6;30082:5;30076:12;30066:22;;29996:99;;;:::o;30101:168::-;30184:11;30218:6;30213:3;30206:19;30258:4;30253:3;30249:14;30234:29;;30101:168;;;;:::o;30275:169::-;30359:11;30393:6;30388:3;30381:19;30433:4;30428:3;30424:14;30409:29;;30275:169;;;;:::o;30450:148::-;30552:11;30589:3;30574:18;;30450:148;;;;:::o;30604:305::-;30644:3;30663:20;30681:1;30663:20;:::i;:::-;30658:25;;30697:20;30715:1;30697:20;:::i;:::-;30692:25;;30851:1;30783:66;30779:74;30776:1;30773:81;30770:107;;;30857:18;;:::i;:::-;30770:107;30901:1;30898;30894:9;30887:16;;30604:305;;;;:::o;30915:185::-;30955:1;30972:20;30990:1;30972:20;:::i;:::-;30967:25;;31006:20;31024:1;31006:20;:::i;:::-;31001:25;;31045:1;31035:35;;31050:18;;:::i;:::-;31035:35;31092:1;31089;31085:9;31080:14;;30915:185;;;;:::o;31106:348::-;31146:7;31169:20;31187:1;31169:20;:::i;:::-;31164:25;;31203:20;31221:1;31203:20;:::i;:::-;31198:25;;31391:1;31323:66;31319:74;31316:1;31313:81;31308:1;31301:9;31294:17;31290:105;31287:131;;;31398:18;;:::i;:::-;31287:131;31446:1;31443;31439:9;31428:20;;31106:348;;;;:::o;31460:191::-;31500:4;31520:20;31538:1;31520:20;:::i;:::-;31515:25;;31554:20;31572:1;31554:20;:::i;:::-;31549:25;;31593:1;31590;31587:8;31584:34;;;31598:18;;:::i;:::-;31584:34;31643:1;31640;31636:9;31628:17;;31460:191;;;;:::o;31657:96::-;31694:7;31723:24;31741:5;31723:24;:::i;:::-;31712:35;;31657:96;;;:::o;31759:90::-;31793:7;31836:5;31829:13;31822:21;31811:32;;31759:90;;;:::o;31855:149::-;31891:7;31931:66;31924:5;31920:78;31909:89;;31855:149;;;:::o;32010:126::-;32047:7;32087:42;32080:5;32076:54;32065:65;;32010:126;;;:::o;32142:77::-;32179:7;32208:5;32197:16;;32142:77;;;:::o;32225:154::-;32309:6;32304:3;32299;32286:30;32371:1;32362:6;32357:3;32353:16;32346:27;32225:154;;;:::o;32385:307::-;32453:1;32463:113;32477:6;32474:1;32471:13;32463:113;;;32562:1;32557:3;32553:11;32547:18;32543:1;32538:3;32534:11;32527:39;32499:2;32496:1;32492:10;32487:15;;32463:113;;;32594:6;32591:1;32588:13;32585:101;;;32674:1;32665:6;32660:3;32656:16;32649:27;32585:101;32434:258;32385:307;;;:::o;32698:320::-;32742:6;32779:1;32773:4;32769:12;32759:22;;32826:1;32820:4;32816:12;32847:18;32837:81;;32903:4;32895:6;32891:17;32881:27;;32837:81;32965:2;32957:6;32954:14;32934:18;32931:38;32928:84;;;32984:18;;:::i;:::-;32928:84;32749:269;32698:320;;;:::o;33024:281::-;33107:27;33129:4;33107:27;:::i;:::-;33099:6;33095:40;33237:6;33225:10;33222:22;33201:18;33189:10;33186:34;33183:62;33180:88;;;33248:18;;:::i;:::-;33180:88;33288:10;33284:2;33277:22;33067:238;33024:281;;:::o;33311:233::-;33350:3;33373:24;33391:5;33373:24;:::i;:::-;33364:33;;33419:66;33412:5;33409:77;33406:103;;;33489:18;;:::i;:::-;33406:103;33536:1;33529:5;33525:13;33518:20;;33311:233;;;:::o;33550:176::-;33582:1;33599:20;33617:1;33599:20;:::i;:::-;33594:25;;33633:20;33651:1;33633:20;:::i;:::-;33628:25;;33672:1;33662:35;;33677:18;;:::i;:::-;33662:35;33718:1;33715;33711:9;33706:14;;33550:176;;;;:::o;33732:180::-;33780:77;33777:1;33770:88;33877:4;33874:1;33867:15;33901:4;33898:1;33891:15;33918:180;33966:77;33963:1;33956:88;34063:4;34060:1;34053:15;34087:4;34084:1;34077:15;34104:180;34152:77;34149:1;34142:88;34249:4;34246:1;34239:15;34273:4;34270:1;34263:15;34290:180;34338:77;34335:1;34328:88;34435:4;34432:1;34425:15;34459:4;34456:1;34449:15;34476:180;34524:77;34521:1;34514:88;34621:4;34618:1;34611:15;34645:4;34642:1;34635:15;34662:117;34771:1;34768;34761:12;34785:117;34894:1;34891;34884:12;34908:117;35017:1;35014;35007:12;35031:117;35140:1;35137;35130:12;35154:102;35195:6;35246:2;35242:7;35237:2;35230:5;35226:14;35222:28;35212:38;;35154:102;;;:::o;35262:221::-;35402:34;35398:1;35390:6;35386:14;35379:58;35471:4;35466:2;35458:6;35454:15;35447:29;35262:221;:::o;35489:171::-;35629:23;35625:1;35617:6;35613:14;35606:47;35489:171;:::o;35666:163::-;35806:15;35802:1;35794:6;35790:14;35783:39;35666:163;:::o;35835:225::-;35975:34;35971:1;35963:6;35959:14;35952:58;36044:8;36039:2;36031:6;36027:15;36020:33;35835:225;:::o;36066:230::-;36206:34;36202:1;36194:6;36190:14;36183:58;36275:13;36270:2;36262:6;36258:15;36251:38;36066:230;:::o;36302:229::-;36442:34;36438:1;36430:6;36426:14;36419:58;36511:12;36506:2;36498:6;36494:15;36487:37;36302:229;:::o;36537:179::-;36677:31;36673:1;36665:6;36661:14;36654:55;36537:179;:::o;36722:222::-;36862:34;36858:1;36850:6;36846:14;36839:58;36931:5;36926:2;36918:6;36914:15;36907:30;36722:222;:::o;36950:224::-;37090:34;37086:1;37078:6;37074:14;37067:58;37159:7;37154:2;37146:6;37142:15;37135:32;36950:224;:::o;37180:244::-;37320:34;37316:1;37308:6;37304:14;37297:58;37389:27;37384:2;37376:6;37372:15;37365:52;37180:244;:::o;37430:230::-;37570:34;37566:1;37558:6;37554:14;37547:58;37639:13;37634:2;37626:6;37622:15;37615:38;37430:230;:::o;37666:225::-;37806:34;37802:1;37794:6;37790:14;37783:58;37875:8;37870:2;37862:6;37858:15;37851:33;37666:225;:::o;37897:182::-;38037:34;38033:1;38025:6;38021:14;38014:58;37897:182;:::o;38085:234::-;38225:34;38221:1;38213:6;38209:14;38202:58;38294:17;38289:2;38281:6;38277:15;38270:42;38085:234;:::o;38325:176::-;38465:28;38461:1;38453:6;38449:14;38442:52;38325:176;:::o;38507:237::-;38647:34;38643:1;38635:6;38631:14;38624:58;38716:20;38711:2;38703:6;38699:15;38692:45;38507:237;:::o;38750:221::-;38890:34;38886:1;38878:6;38874:14;38867:58;38959:4;38954:2;38946:6;38942:15;38935:29;38750:221;:::o;38977:238::-;39117:34;39113:1;39105:6;39101:14;39094:58;39186:21;39181:2;39173:6;39169:15;39162:46;38977:238;:::o;39221:220::-;39361:34;39357:1;39349:6;39345:14;39338:58;39430:3;39425:2;39417:6;39413:15;39406:28;39221:220;:::o;39447:227::-;39587:34;39583:1;39575:6;39571:14;39564:58;39656:10;39651:2;39643:6;39639:15;39632:35;39447:227;:::o;39680:233::-;39820:34;39816:1;39808:6;39804:14;39797:58;39889:16;39884:2;39876:6;39872:15;39865:41;39680:233;:::o;39919:234::-;40059:34;40055:1;40047:6;40043:14;40036:58;40128:17;40123:2;40115:6;40111:15;40104:42;39919:234;:::o;40159:232::-;40299:34;40295:1;40287:6;40283:14;40276:58;40368:15;40363:2;40355:6;40351:15;40344:40;40159:232;:::o;40397:122::-;40470:24;40488:5;40470:24;:::i;:::-;40463:5;40460:35;40450:63;;40509:1;40506;40499:12;40450:63;40397:122;:::o;40525:116::-;40595:21;40610:5;40595:21;:::i;:::-;40588:5;40585:32;40575:60;;40631:1;40628;40621:12;40575:60;40525:116;:::o;40647:120::-;40719:23;40736:5;40719:23;:::i;:::-;40712:5;40709:34;40699:62;;40757:1;40754;40747:12;40699:62;40647:120;:::o;40773:122::-;40846:24;40864:5;40846:24;:::i;:::-;40839:5;40836:35;40826:63;;40885:1;40882;40875:12;40826:63;40773:122;:::o

Swarm Source

ipfs://878b39d3ba44b75981e078fd7f0343db9857e0b7831ec1c46d2a07fac6b76e67
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.