ETH Price: $2,403.30 (-3.17%)
 

Overview

Max Total Supply

498 AXT

Holders

85

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
the-stoics.eth
Balance
3 AXT
0x324fb8fe0c9f09c671b337c91c17e7f36cfcabc4
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:
AnatomyxToadz

Compiler Version
v0.8.0+commit.c7dfd78e

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-16
*/

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

//Anatomy of xToadz
//Trying to bring people together.  Portion of mint will be donated to Ukraine efforts.
pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/access/[email protected]


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



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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/[email protected]


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



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





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



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





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



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





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



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




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



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





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



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





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



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




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



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


// Creator: Chiru Labs


/**
 * @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 (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 = 0;

    // 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 = 0;
        address currOwnershipAddr = address(0);
        for (uint256 i = 0; 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);
    }

    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        require(_exists(tokenId), 'ERC721A: owner query for nonexistent token');

        for (uint256 curr = tokenId; ; 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 Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` cannot be larger than the max batch size.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), 'ERC721A: mint to the zero address');
        // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
        require(!_exists(startTokenId), 'ERC721A: token already minted');
        require(quantity > 0, 'ERC721A: quantity must be greater 0');

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

        AddressData memory addressData = _addressData[to];
        _addressData[to] = AddressData(
            addressData.balance + uint128(quantity),
            addressData.numberMinted + uint128(quantity)
        );
        _ownerships[startTokenId] = TokenOwnership(to, uint64(block.timestamp));

        uint256 updatedIndex = startTokenId;

        for (uint256 i = 0; i < quantity; i++) {
            emit Transfer(address(0), to, updatedIndex);
            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.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;
        }

        _ownerships[tokenId] = TokenOwnership(to, 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] = TokenOwnership(prevOwnership.addr, 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 {}
}

contract AnatomyxToadz is ERC721A, Ownable {

    string public baseURI = "ipfs://QmeczuPjWyJN952TEuP7NY1gRdHCwY7Zo4j6u1kzHMPgen/";
    string public contractURI = "ipfs://QmTmi6svP64wMJRira2iDmsMzM99TMAyRXdUyx8kyhBqZ5";
    string public constant baseExtension = ".json";
    address public constant proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1;

    uint256 public constant MAX_PER_TX_FREE = 5;
    uint256 public constant MAX_PER_WALLET = 20;
    uint256 public constant MAX_PER_TX = 5;
    uint256 public constant FREE_MAX_SUPPLY = 300;
    uint256 public constant MAX_SUPPLY = 2222;
    uint256 public constant price = 0.004 ether;

    bool public paused = false;
 mapping(address => uint256) public addressMinted;
    constructor() ERC721A("Anatomy xToadz", "AXT") {}

    function mint(uint256 _amount) external payable {
        address _caller = _msgSender();
        require(!paused, "Paused");
        require(MAX_SUPPLY >= totalSupply() + _amount, "Exceeds max supply");
        require(_amount > 0, "No 0 mints");
        require(tx.origin == _caller, "No contracts");

         require(addressMinted[msg.sender] + _amount <= MAX_PER_WALLET, "Exceeds max per wallet");


        if(FREE_MAX_SUPPLY >= totalSupply()){
            require(MAX_PER_TX_FREE >= _amount , "Excess max per free tx");
        }else{
            require(MAX_PER_TX >= _amount , "Excess max per paid tx");
            require(_amount * price == msg.value, "Invalid funds provided");
        }


       addressMinted[msg.sender] += _amount;

        _safeMint(_caller, _amount);
    }

    function isApprovedForAll(address owner, address operator)
        override
        public
        view
        returns (bool)
    {
       //  Whitelist OpenSea proxy contract for easy trading.
        ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(owner)) == operator) {
            return true;
    }

        return super.isApprovedForAll(owner, operator);
    }

    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        (bool success, ) = _msgSender().call{value: balance}("");
        require(success, "Failed to send");
    }

    function pause(bool _state) external onlyOwner {
        paused = _state;
    }

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

    function setContractURI(string memory _contractURI) external onlyOwner {
        contractURI = _contractURI;
    }

    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        require(_exists(_tokenId), "Token does not exist.");
        return bytes(baseURI).length > 0 ? string(
            abi.encodePacked(
              baseURI,
              Strings.toString(_tokenId),
              baseExtension
            )
        ) : "";
    }
}

contract OwnableDelegateProxy { }
contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":[],"name":"FREE_MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX_FREE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":[{"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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000805560405180606001604052806036815260200162004c0d60369139600890805190602001906200003992919062000229565b5060405180606001604052806035815260200162004c4360359139600990805190602001906200006b92919062000229565b506000600a60006101000a81548160ff0219169083151502179055503480156200009457600080fd5b506040518060400160405280600e81526020017f416e61746f6d792078546f61647a0000000000000000000000000000000000008152506040518060400160405280600381526020017f415854000000000000000000000000000000000000000000000000000000000081525081600190805190602001906200011992919062000229565b5080600290805190602001906200013292919062000229565b50505062000155620001496200015b60201b60201c565b6200016360201b60201c565b6200033e565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200023790620002d9565b90600052602060002090601f0160209004810192826200025b5760008555620002a7565b82601f106200027657805160ff1916838001178555620002a7565b82800160010185558215620002a7579182015b82811115620002a657825182559160200191906001019062000289565b5b509050620002b69190620002ba565b5090565b5b80821115620002d5576000816000905550600101620002bb565b5090565b60006002820490506001821680620002f257607f821691505b602082108114156200030957620003086200030f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6148bf806200034e6000396000f3fe60806040526004361061020f5760003560e01c806370a0823111610118578063b88d4fde116100a0578063e8a3d4851161006f578063e8a3d48514610780578063e985e9c5146107ab578063f2fde38b146107e8578063f43a22dc14610811578063fa30297e1461083c5761020f565b8063b88d4fde146106c4578063c6682862146106ed578063c87b56dd14610718578063cd7c0326146107555761020f565b8063938e3d7b116100e7578063938e3d7b1461060057806395d89b4114610629578063a035b1fe14610654578063a0712d681461067f578063a22cb4651461069b5761020f565b806370a0823114610556578063715018a6146105935780638069876d146105aa5780638da5cb5b146105d55761020f565b806332cb6b0c1161019b5780634f6ccce71161016a5780634f6ccce71461045d57806355f804b31461049a5780635c975abb146104c35780636352211e146104ee5780636c0360eb1461052b5761020f565b806332cb6b0c146103c75780633ccfd60b146103f257806342842e0e14610409578063463fff79146104325761020f565b8063095ea7b3116101e2578063095ea7b3146102e25780630f2cdd6c1461030b57806318160ddd1461033657806323b872dd146103615780632f745c591461038a5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190613333565b610879565b6040516102489190613f68565b60405180910390f35b34801561025d57600080fd5b506102786004803603810190610273919061330a565b6109c3565b005b34801561028657600080fd5b5061028f610a5c565b60405161029c9190613f83565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c791906133ef565b610aee565b6040516102d99190613f01565b60405180910390f35b3480156102ee57600080fd5b50610309600480360381019061030491906132ce565b610b73565b005b34801561031757600080fd5b50610320610c8c565b60405161032d9190614325565b60405180910390f35b34801561034257600080fd5b5061034b610c91565b6040516103589190614325565b60405180910390f35b34801561036d57600080fd5b50610388600480360381019061038391906131c8565b610c9a565b005b34801561039657600080fd5b506103b160048036038101906103ac91906132ce565b610caa565b6040516103be9190614325565b60405180910390f35b3480156103d357600080fd5b506103dc610ea8565b6040516103e99190614325565b60405180910390f35b3480156103fe57600080fd5b50610407610eae565b005b34801561041557600080fd5b50610430600480360381019061042b91906131c8565b610fe6565b005b34801561043e57600080fd5b50610447611006565b6040516104549190614325565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f91906133ef565b61100b565b6040516104919190614325565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc91906133ae565b61105e565b005b3480156104cf57600080fd5b506104d86110f4565b6040516104e59190613f68565b60405180910390f35b3480156104fa57600080fd5b50610515600480360381019061051091906133ef565b611107565b6040516105229190613f01565b60405180910390f35b34801561053757600080fd5b5061054061111d565b60405161054d9190613f83565b60405180910390f35b34801561056257600080fd5b5061057d60048036038101906105789190613163565b6111ab565b60405161058a9190614325565b60405180910390f35b34801561059f57600080fd5b506105a8611294565b005b3480156105b657600080fd5b506105bf61131c565b6040516105cc9190614325565b60405180910390f35b3480156105e157600080fd5b506105ea611322565b6040516105f79190613f01565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906133ae565b61134c565b005b34801561063557600080fd5b5061063e6113e2565b60405161064b9190613f83565b60405180910390f35b34801561066057600080fd5b50610669611474565b6040516106769190614325565b60405180910390f35b610699600480360381019061069491906133ef565b61147f565b005b3480156106a757600080fd5b506106c260048036038101906106bd9190613292565b6117c7565b005b3480156106d057600080fd5b506106eb60048036038101906106e69190613217565b611948565b005b3480156106f957600080fd5b506107026119a4565b60405161070f9190613f83565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a91906133ef565b6119dd565b60405161074c9190613f83565b60405180910390f35b34801561076157600080fd5b5061076a611abc565b6040516107779190613f01565b60405180910390f35b34801561078c57600080fd5b50610795611ad4565b6040516107a29190613f83565b60405180910390f35b3480156107b757600080fd5b506107d260048036038101906107cd919061318c565b611b62565b6040516107df9190613f68565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a9190613163565b611c56565b005b34801561081d57600080fd5b50610826611d4e565b6040516108339190614325565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190613163565b611d53565b6040516108709190614325565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109ac57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109bc57506109bb82611d6b565b5b9050919050565b6109cb611dd5565b73ffffffffffffffffffffffffffffffffffffffff166109e9611322565b73ffffffffffffffffffffffffffffffffffffffff1614610a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3690614165565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b606060018054610a6b9061469d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a979061469d565b8015610ae45780601f10610ab957610100808354040283529160200191610ae4565b820191906000526020600020905b815481529060010190602001808311610ac757829003601f168201915b5050505050905090565b6000610af982611ddd565b610b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2f906142e5565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b7e82611107565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be6906141e5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c0e611dd5565b73ffffffffffffffffffffffffffffffffffffffff161480610c3d5750610c3c81610c37611dd5565b611b62565b5b610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c73906140c5565b60405180910390fd5b610c87838383611dea565b505050565b601481565b60008054905090565b610ca5838383611e9c565b505050565b6000610cb5836111ab565b8210610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced90613fa5565b60405180910390fd5b6000610d00610c91565b905060008060005b83811015610e66576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610dfa57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e525786841415610e43578195505050505050610ea2565b8380610e4e906146cf565b9450505b508080610e5e906146cf565b915050610d08565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e99906142a5565b60405180910390fd5b92915050565b6108ae81565b610eb6611dd5565b73ffffffffffffffffffffffffffffffffffffffff16610ed4611322565b73ffffffffffffffffffffffffffffffffffffffff1614610f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2190614165565b60405180910390fd5b60004790506000610f39611dd5565b73ffffffffffffffffffffffffffffffffffffffff1682604051610f5c90613eec565b60006040518083038185875af1925050503d8060008114610f99576040519150601f19603f3d011682016040523d82523d6000602084013e610f9e565b606091505b5050905080610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd990614285565b60405180910390fd5b5050565b61100183838360405180602001604052806000815250611948565b505050565b600581565b6000611015610c91565b8210611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104d90614065565b60405180910390fd5b819050919050565b611066611dd5565b73ffffffffffffffffffffffffffffffffffffffff16611084611322565b73ffffffffffffffffffffffffffffffffffffffff16146110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190614165565b60405180910390fd5b80600890805190602001906110f0929190612f38565b5050565b600a60009054906101000a900460ff1681565b600061111282612443565b600001519050919050565b6008805461112a9061469d565b80601f01602080910402602001604051908101604052809291908181526020018280546111569061469d565b80156111a35780601f10611178576101008083540402835291602001916111a3565b820191906000526020600020905b81548152906001019060200180831161118657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390614105565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61129c611dd5565b73ffffffffffffffffffffffffffffffffffffffff166112ba611322565b73ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790614165565b60405180910390fd5b61131a600061259e565b565b61012c81565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611354611dd5565b73ffffffffffffffffffffffffffffffffffffffff16611372611322565b73ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90614165565b60405180910390fd5b80600990805190602001906113de929190612f38565b5050565b6060600280546113f19061469d565b80601f016020809104026020016040519081016040528092919081815260200182805461141d9061469d565b801561146a5780601f1061143f5761010080835404028352916020019161146a565b820191906000526020600020905b81548152906001019060200180831161144d57829003601f168201915b5050505050905090565b660e35fa931a000081565b6000611489611dd5565b9050600a60009054906101000a900460ff16156114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290613fc5565b60405180910390fd5b816114e4610c91565b6114ee919061447a565b6108ae1015611532576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611529906140e5565b60405180910390fd5b60008211611575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156c90614025565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146115e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115da90614305565b60405180910390fd5b601482600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611630919061447a565b1115611671576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611668906142c5565b60405180910390fd5b611679610c91565b61012c106116ca5781600510156116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc906140a5565b60405180910390fd5b611763565b816005101561170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590614045565b60405180910390fd5b34660e35fa931a0000836117229190614501565b14611762576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611759906141c5565b60405180910390fd5b5b81600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117b2919061447a565b925050819055506117c38183612664565b5050565b6117cf611dd5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183490614185565b60405180910390fd5b806006600061184a611dd5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118f7611dd5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161193c9190613f68565b60405180910390a35050565b611953848484611e9c565b61195f84848484612682565b61199e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199590614225565b60405180910390fd5b50505050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b60606119e882611ddd565b611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e90614125565b60405180910390fd5b600060088054611a369061469d565b905011611a525760405180602001604052806000815250611ab5565b6008611a5d83612819565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250604051602001611aa593929190613ebb565b6040516020818303038152906040525b9050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60098054611ae19061469d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0d9061469d565b8015611b5a5780601f10611b2f57610100808354040283529160200191611b5a565b820191906000526020600020905b815481529060010190602001808311611b3d57829003601f168201915b505050505081565b60008073a5409ec958c83c3f309868babaca7c86dcb077c190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401611bcc9190613f01565b60206040518083038186803b158015611be457600080fd5b505afa158015611bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1c9190613385565b73ffffffffffffffffffffffffffffffffffffffff161415611c42576001915050611c50565b611c4c84846129c6565b9150505b92915050565b611c5e611dd5565b73ffffffffffffffffffffffffffffffffffffffff16611c7c611322565b73ffffffffffffffffffffffffffffffffffffffff1614611cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc990614165565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3990613fe5565b60405180910390fd5b611d4b8161259e565b50565b600581565b600b6020528060005260406000206000915090505481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ea782612443565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611ece611dd5565b73ffffffffffffffffffffffffffffffffffffffff161480611f2a5750611ef3611dd5565b73ffffffffffffffffffffffffffffffffffffffff16611f1284610aee565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f465750611f458260000151611f40611dd5565b611b62565b5b905080611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f906141a5565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff190614145565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561206a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206190614085565b60405180910390fd5b6120778585856001612a5a565b6120876000848460000151611dea565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461228d919061447a565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123d35761230381611ddd565b156123d2576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461243b8686866001612a60565b505050505050565b61244b612fbe565b61245482611ddd565b612493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248a90614005565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612585578092505050612599565b50808061259190614673565b915050612499565b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61267e828260405180602001604052806000815250612a66565b5050565b60006126a38473ffffffffffffffffffffffffffffffffffffffff16612f25565b1561280c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126cc611dd5565b8786866040518563ffffffff1660e01b81526004016126ee9493929190613f1c565b602060405180830381600087803b15801561270857600080fd5b505af192505050801561273957506040513d601f19601f82011682018060405250810190612736919061335c565b60015b6127bc573d8060008114612769576040519150601f19603f3d011682016040523d82523d6000602084013e61276e565b606091505b506000815114156127b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ab90614225565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612811565b600190505b949350505050565b60606000821415612861576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129c1565b600082905060005b6000821461289357808061287c906146cf565b915050600a8261288c91906144d0565b9150612869565b60008167ffffffffffffffff8111156128d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156129075781602001600182028036833780820191505090505b5090505b600085146129ba57600182612920919061455b565b9150600a8561292f9190614718565b603061293b919061447a565b60f81b818381518110612977577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129b391906144d0565b945061290b565b8093505050505b919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad390614265565b60405180910390fd5b612ae581611ddd565b15612b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1c90614245565b60405180910390fd5b60008311612b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5f90614205565b60405180910390fd5b612b756000858386612a5a565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612c729190614434565b6fffffffffffffffffffffffffffffffff168152602001858360200151612c999190614434565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612f0857818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ea86000888488612682565b612ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ede90614225565b60405180910390fd5b8180612ef2906146cf565b9250508080612f00906146cf565b915050612e37565b5080600081905550612f1d6000878588612a60565b505050505050565b600080823b905060008111915050919050565b828054612f449061469d565b90600052602060002090601f016020900481019282612f665760008555612fad565b82601f10612f7f57805160ff1916838001178555612fad565b82800160010185558215612fad579182015b82811115612fac578251825591602001919060010190612f91565b5b509050612fba9190612ff8565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613011576000816000905550600101612ff9565b5090565b600061302861302384614371565b614340565b90508281526020810184848401111561304057600080fd5b61304b848285614631565b509392505050565b6000613066613061846143a1565b614340565b90508281526020810184848401111561307e57600080fd5b613089848285614631565b509392505050565b6000813590506130a081614816565b92915050565b6000813590506130b58161482d565b92915050565b6000813590506130ca81614844565b92915050565b6000815190506130df81614844565b92915050565b600082601f8301126130f657600080fd5b8135613106848260208601613015565b91505092915050565b60008151905061311e8161485b565b92915050565b600082601f83011261313557600080fd5b8135613145848260208601613053565b91505092915050565b60008135905061315d81614872565b92915050565b60006020828403121561317557600080fd5b600061318384828501613091565b91505092915050565b6000806040838503121561319f57600080fd5b60006131ad85828601613091565b92505060206131be85828601613091565b9150509250929050565b6000806000606084860312156131dd57600080fd5b60006131eb86828701613091565b93505060206131fc86828701613091565b925050604061320d8682870161314e565b9150509250925092565b6000806000806080858703121561322d57600080fd5b600061323b87828801613091565b945050602061324c87828801613091565b935050604061325d8782880161314e565b925050606085013567ffffffffffffffff81111561327a57600080fd5b613286878288016130e5565b91505092959194509250565b600080604083850312156132a557600080fd5b60006132b385828601613091565b92505060206132c4858286016130a6565b9150509250929050565b600080604083850312156132e157600080fd5b60006132ef85828601613091565b92505060206133008582860161314e565b9150509250929050565b60006020828403121561331c57600080fd5b600061332a848285016130a6565b91505092915050565b60006020828403121561334557600080fd5b6000613353848285016130bb565b91505092915050565b60006020828403121561336e57600080fd5b600061337c848285016130d0565b91505092915050565b60006020828403121561339757600080fd5b60006133a58482850161310f565b91505092915050565b6000602082840312156133c057600080fd5b600082013567ffffffffffffffff8111156133da57600080fd5b6133e684828501613124565b91505092915050565b60006020828403121561340157600080fd5b600061340f8482850161314e565b91505092915050565b6134218161458f565b82525050565b613430816145a1565b82525050565b6000613441826143e6565b61344b81856143fc565b935061345b818560208601614640565b61346481614805565b840191505092915050565b600061347a826143f1565b6134848185614418565b9350613494818560208601614640565b61349d81614805565b840191505092915050565b60006134b3826143f1565b6134bd8185614429565b93506134cd818560208601614640565b80840191505092915050565b600081546134e68161469d565b6134f08186614429565b9450600182166000811461350b576001811461351c5761354f565b60ff1983168652818601935061354f565b613525856143d1565b60005b8381101561354757815481890152600182019150602081019050613528565b838801955050505b50505092915050565b6000613565602283614418565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135cb600683614418565b91507f50617573656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b600061360b602683614418565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613671602a83614418565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b60006136d7600a83614418565b91507f4e6f2030206d696e7473000000000000000000000000000000000000000000006000830152602082019050919050565b6000613717601683614418565b91507f457863657373206d6178207065722070616964207478000000000000000000006000830152602082019050919050565b6000613757602383614418565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137bd602583614418565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613823601683614418565b91507f457863657373206d6178207065722066726565207478000000000000000000006000830152602082019050919050565b6000613863603983614418565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b60006138c9601283614418565b91507f45786365656473206d617820737570706c7900000000000000000000000000006000830152602082019050919050565b6000613909602b83614418565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061396f601583614418565b91507f546f6b656e20646f6573206e6f742065786973742e00000000000000000000006000830152602082019050919050565b60006139af602683614418565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a15602083614418565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613a55601a83614418565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b6000613a95603283614418565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000613afb601683614418565b91507f496e76616c69642066756e64732070726f7669646564000000000000000000006000830152602082019050919050565b6000613b3b602283614418565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ba160008361440d565b9150600082019050919050565b6000613bbb602383614418565b91507f455243373231413a207175616e74697479206d7573742062652067726561746560008301527f72203000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c21603383614418565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b6000613c87601d83614418565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b6000613cc7602183614418565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d2d600e83614418565b91507f4661696c656420746f2073656e640000000000000000000000000000000000006000830152602082019050919050565b6000613d6d602e83614418565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b6000613dd3601683614418565b91507f45786365656473206d6178207065722077616c6c6574000000000000000000006000830152602082019050919050565b6000613e13602d83614418565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000613e79600c83614418565b91507f4e6f20636f6e74726163747300000000000000000000000000000000000000006000830152602082019050919050565b613eb581614627565b82525050565b6000613ec782866134d9565b9150613ed382856134a8565b9150613edf82846134a8565b9150819050949350505050565b6000613ef782613b94565b9150819050919050565b6000602082019050613f166000830184613418565b92915050565b6000608082019050613f316000830187613418565b613f3e6020830186613418565b613f4b6040830185613eac565b8181036060830152613f5d8184613436565b905095945050505050565b6000602082019050613f7d6000830184613427565b92915050565b60006020820190508181036000830152613f9d818461346f565b905092915050565b60006020820190508181036000830152613fbe81613558565b9050919050565b60006020820190508181036000830152613fde816135be565b9050919050565b60006020820190508181036000830152613ffe816135fe565b9050919050565b6000602082019050818103600083015261401e81613664565b9050919050565b6000602082019050818103600083015261403e816136ca565b9050919050565b6000602082019050818103600083015261405e8161370a565b9050919050565b6000602082019050818103600083015261407e8161374a565b9050919050565b6000602082019050818103600083015261409e816137b0565b9050919050565b600060208201905081810360008301526140be81613816565b9050919050565b600060208201905081810360008301526140de81613856565b9050919050565b600060208201905081810360008301526140fe816138bc565b9050919050565b6000602082019050818103600083015261411e816138fc565b9050919050565b6000602082019050818103600083015261413e81613962565b9050919050565b6000602082019050818103600083015261415e816139a2565b9050919050565b6000602082019050818103600083015261417e81613a08565b9050919050565b6000602082019050818103600083015261419e81613a48565b9050919050565b600060208201905081810360008301526141be81613a88565b9050919050565b600060208201905081810360008301526141de81613aee565b9050919050565b600060208201905081810360008301526141fe81613b2e565b9050919050565b6000602082019050818103600083015261421e81613bae565b9050919050565b6000602082019050818103600083015261423e81613c14565b9050919050565b6000602082019050818103600083015261425e81613c7a565b9050919050565b6000602082019050818103600083015261427e81613cba565b9050919050565b6000602082019050818103600083015261429e81613d20565b9050919050565b600060208201905081810360008301526142be81613d60565b9050919050565b600060208201905081810360008301526142de81613dc6565b9050919050565b600060208201905081810360008301526142fe81613e06565b9050919050565b6000602082019050818103600083015261431e81613e6c565b9050919050565b600060208201905061433a6000830184613eac565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614367576143666147d6565b5b8060405250919050565b600067ffffffffffffffff82111561438c5761438b6147d6565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156143bc576143bb6147d6565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061443f826145eb565b915061444a836145eb565b9250826fffffffffffffffffffffffffffffffff0382111561446f5761446e614749565b5b828201905092915050565b600061448582614627565b915061449083614627565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144c5576144c4614749565b5b828201905092915050565b60006144db82614627565b91506144e683614627565b9250826144f6576144f5614778565b5b828204905092915050565b600061450c82614627565b915061451783614627565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145505761454f614749565b5b828202905092915050565b600061456682614627565b915061457183614627565b92508282101561458457614583614749565b5b828203905092915050565b600061459a82614607565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006145e48261458f565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561465e578082015181840152602081019050614643565b8381111561466d576000848401525b50505050565b600061467e82614627565b9150600082141561469257614691614749565b5b600182039050919050565b600060028204905060018216806146b557607f821691505b602082108114156146c9576146c86147a7565b5b50919050565b60006146da82614627565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561470d5761470c614749565b5b600182019050919050565b600061472382614627565b915061472e83614627565b92508261473e5761473d614778565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61481f8161458f565b811461482a57600080fd5b50565b614836816145a1565b811461484157600080fd5b50565b61484d816145ad565b811461485857600080fd5b50565b614864816145d9565b811461486f57600080fd5b50565b61487b81614627565b811461488657600080fd5b5056fea2646970667358221220c037576c3bcef4829a4462d21d12f78b56d72961d156fcc8a828cf5e3090436264736f6c63430008000033697066733a2f2f516d65637a75506a57794a4e39353254457550374e593167526448437759375a6f346a3675316b7a484d5067656e2f697066733a2f2f516d546d69367376503634774d4a526972613269446d734d7a4d3939544d4179525864557978386b796842715a35

Deployed Bytecode

0x60806040526004361061020f5760003560e01c806370a0823111610118578063b88d4fde116100a0578063e8a3d4851161006f578063e8a3d48514610780578063e985e9c5146107ab578063f2fde38b146107e8578063f43a22dc14610811578063fa30297e1461083c5761020f565b8063b88d4fde146106c4578063c6682862146106ed578063c87b56dd14610718578063cd7c0326146107555761020f565b8063938e3d7b116100e7578063938e3d7b1461060057806395d89b4114610629578063a035b1fe14610654578063a0712d681461067f578063a22cb4651461069b5761020f565b806370a0823114610556578063715018a6146105935780638069876d146105aa5780638da5cb5b146105d55761020f565b806332cb6b0c1161019b5780634f6ccce71161016a5780634f6ccce71461045d57806355f804b31461049a5780635c975abb146104c35780636352211e146104ee5780636c0360eb1461052b5761020f565b806332cb6b0c146103c75780633ccfd60b146103f257806342842e0e14610409578063463fff79146104325761020f565b8063095ea7b3116101e2578063095ea7b3146102e25780630f2cdd6c1461030b57806318160ddd1461033657806323b872dd146103615780632f745c591461038a5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190613333565b610879565b6040516102489190613f68565b60405180910390f35b34801561025d57600080fd5b506102786004803603810190610273919061330a565b6109c3565b005b34801561028657600080fd5b5061028f610a5c565b60405161029c9190613f83565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c791906133ef565b610aee565b6040516102d99190613f01565b60405180910390f35b3480156102ee57600080fd5b50610309600480360381019061030491906132ce565b610b73565b005b34801561031757600080fd5b50610320610c8c565b60405161032d9190614325565b60405180910390f35b34801561034257600080fd5b5061034b610c91565b6040516103589190614325565b60405180910390f35b34801561036d57600080fd5b50610388600480360381019061038391906131c8565b610c9a565b005b34801561039657600080fd5b506103b160048036038101906103ac91906132ce565b610caa565b6040516103be9190614325565b60405180910390f35b3480156103d357600080fd5b506103dc610ea8565b6040516103e99190614325565b60405180910390f35b3480156103fe57600080fd5b50610407610eae565b005b34801561041557600080fd5b50610430600480360381019061042b91906131c8565b610fe6565b005b34801561043e57600080fd5b50610447611006565b6040516104549190614325565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f91906133ef565b61100b565b6040516104919190614325565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc91906133ae565b61105e565b005b3480156104cf57600080fd5b506104d86110f4565b6040516104e59190613f68565b60405180910390f35b3480156104fa57600080fd5b50610515600480360381019061051091906133ef565b611107565b6040516105229190613f01565b60405180910390f35b34801561053757600080fd5b5061054061111d565b60405161054d9190613f83565b60405180910390f35b34801561056257600080fd5b5061057d60048036038101906105789190613163565b6111ab565b60405161058a9190614325565b60405180910390f35b34801561059f57600080fd5b506105a8611294565b005b3480156105b657600080fd5b506105bf61131c565b6040516105cc9190614325565b60405180910390f35b3480156105e157600080fd5b506105ea611322565b6040516105f79190613f01565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906133ae565b61134c565b005b34801561063557600080fd5b5061063e6113e2565b60405161064b9190613f83565b60405180910390f35b34801561066057600080fd5b50610669611474565b6040516106769190614325565b60405180910390f35b610699600480360381019061069491906133ef565b61147f565b005b3480156106a757600080fd5b506106c260048036038101906106bd9190613292565b6117c7565b005b3480156106d057600080fd5b506106eb60048036038101906106e69190613217565b611948565b005b3480156106f957600080fd5b506107026119a4565b60405161070f9190613f83565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a91906133ef565b6119dd565b60405161074c9190613f83565b60405180910390f35b34801561076157600080fd5b5061076a611abc565b6040516107779190613f01565b60405180910390f35b34801561078c57600080fd5b50610795611ad4565b6040516107a29190613f83565b60405180910390f35b3480156107b757600080fd5b506107d260048036038101906107cd919061318c565b611b62565b6040516107df9190613f68565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a9190613163565b611c56565b005b34801561081d57600080fd5b50610826611d4e565b6040516108339190614325565b60405180910390f35b34801561084857600080fd5b50610863600480360381019061085e9190613163565b611d53565b6040516108709190614325565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061094457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109ac57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109bc57506109bb82611d6b565b5b9050919050565b6109cb611dd5565b73ffffffffffffffffffffffffffffffffffffffff166109e9611322565b73ffffffffffffffffffffffffffffffffffffffff1614610a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3690614165565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b606060018054610a6b9061469d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a979061469d565b8015610ae45780601f10610ab957610100808354040283529160200191610ae4565b820191906000526020600020905b815481529060010190602001808311610ac757829003601f168201915b5050505050905090565b6000610af982611ddd565b610b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2f906142e5565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b7e82611107565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be6906141e5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c0e611dd5565b73ffffffffffffffffffffffffffffffffffffffff161480610c3d5750610c3c81610c37611dd5565b611b62565b5b610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c73906140c5565b60405180910390fd5b610c87838383611dea565b505050565b601481565b60008054905090565b610ca5838383611e9c565b505050565b6000610cb5836111ab565b8210610cf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ced90613fa5565b60405180910390fd5b6000610d00610c91565b905060008060005b83811015610e66576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610dfa57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e525786841415610e43578195505050505050610ea2565b8380610e4e906146cf565b9450505b508080610e5e906146cf565b915050610d08565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e99906142a5565b60405180910390fd5b92915050565b6108ae81565b610eb6611dd5565b73ffffffffffffffffffffffffffffffffffffffff16610ed4611322565b73ffffffffffffffffffffffffffffffffffffffff1614610f2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2190614165565b60405180910390fd5b60004790506000610f39611dd5565b73ffffffffffffffffffffffffffffffffffffffff1682604051610f5c90613eec565b60006040518083038185875af1925050503d8060008114610f99576040519150601f19603f3d011682016040523d82523d6000602084013e610f9e565b606091505b5050905080610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd990614285565b60405180910390fd5b5050565b61100183838360405180602001604052806000815250611948565b505050565b600581565b6000611015610c91565b8210611056576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104d90614065565b60405180910390fd5b819050919050565b611066611dd5565b73ffffffffffffffffffffffffffffffffffffffff16611084611322565b73ffffffffffffffffffffffffffffffffffffffff16146110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190614165565b60405180910390fd5b80600890805190602001906110f0929190612f38565b5050565b600a60009054906101000a900460ff1681565b600061111282612443565b600001519050919050565b6008805461112a9061469d565b80601f01602080910402602001604051908101604052809291908181526020018280546111569061469d565b80156111a35780601f10611178576101008083540402835291602001916111a3565b820191906000526020600020905b81548152906001019060200180831161118657829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390614105565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b61129c611dd5565b73ffffffffffffffffffffffffffffffffffffffff166112ba611322565b73ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790614165565b60405180910390fd5b61131a600061259e565b565b61012c81565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611354611dd5565b73ffffffffffffffffffffffffffffffffffffffff16611372611322565b73ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90614165565b60405180910390fd5b80600990805190602001906113de929190612f38565b5050565b6060600280546113f19061469d565b80601f016020809104026020016040519081016040528092919081815260200182805461141d9061469d565b801561146a5780601f1061143f5761010080835404028352916020019161146a565b820191906000526020600020905b81548152906001019060200180831161144d57829003601f168201915b5050505050905090565b660e35fa931a000081565b6000611489611dd5565b9050600a60009054906101000a900460ff16156114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290613fc5565b60405180910390fd5b816114e4610c91565b6114ee919061447a565b6108ae1015611532576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611529906140e5565b60405180910390fd5b60008211611575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156c90614025565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146115e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115da90614305565b60405180910390fd5b601482600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611630919061447a565b1115611671576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611668906142c5565b60405180910390fd5b611679610c91565b61012c106116ca5781600510156116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc906140a5565b60405180910390fd5b611763565b816005101561170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170590614045565b60405180910390fd5b34660e35fa931a0000836117229190614501565b14611762576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611759906141c5565b60405180910390fd5b5b81600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117b2919061447a565b925050819055506117c38183612664565b5050565b6117cf611dd5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561183d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183490614185565b60405180910390fd5b806006600061184a611dd5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118f7611dd5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161193c9190613f68565b60405180910390a35050565b611953848484611e9c565b61195f84848484612682565b61199e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199590614225565b60405180910390fd5b50505050565b6040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525081565b60606119e882611ddd565b611a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1e90614125565b60405180910390fd5b600060088054611a369061469d565b905011611a525760405180602001604052806000815250611ab5565b6008611a5d83612819565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250604051602001611aa593929190613ebb565b6040516020818303038152906040525b9050919050565b73a5409ec958c83c3f309868babaca7c86dcb077c181565b60098054611ae19061469d565b80601f0160208091040260200160405190810160405280929190818152602001828054611b0d9061469d565b8015611b5a5780601f10611b2f57610100808354040283529160200191611b5a565b820191906000526020600020905b815481529060010190602001808311611b3d57829003601f168201915b505050505081565b60008073a5409ec958c83c3f309868babaca7c86dcb077c190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401611bcc9190613f01565b60206040518083038186803b158015611be457600080fd5b505afa158015611bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1c9190613385565b73ffffffffffffffffffffffffffffffffffffffff161415611c42576001915050611c50565b611c4c84846129c6565b9150505b92915050565b611c5e611dd5565b73ffffffffffffffffffffffffffffffffffffffff16611c7c611322565b73ffffffffffffffffffffffffffffffffffffffff1614611cd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc990614165565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3990613fe5565b60405180910390fd5b611d4b8161259e565b50565b600581565b600b6020528060005260406000206000915090505481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ea782612443565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611ece611dd5565b73ffffffffffffffffffffffffffffffffffffffff161480611f2a5750611ef3611dd5565b73ffffffffffffffffffffffffffffffffffffffff16611f1284610aee565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f465750611f458260000151611f40611dd5565b611b62565b5b905080611f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7f906141a5565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff190614145565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561206a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206190614085565b60405180910390fd5b6120778585856001612a5a565b6120876000848460000151611dea565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060405180604001604052808573ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600060018461228d919061447a565b9050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156123d35761230381611ddd565b156123d2576040518060400160405280846000015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015167ffffffffffffffff168152506003600083815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461243b8686866001612a60565b505050505050565b61244b612fbe565b61245482611ddd565b612493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248a90614005565b60405180910390fd5b60008290505b6000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612585578092505050612599565b50808061259190614673565b915050612499565b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61267e828260405180602001604052806000815250612a66565b5050565b60006126a38473ffffffffffffffffffffffffffffffffffffffff16612f25565b1561280c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026126cc611dd5565b8786866040518563ffffffff1660e01b81526004016126ee9493929190613f1c565b602060405180830381600087803b15801561270857600080fd5b505af192505050801561273957506040513d601f19601f82011682018060405250810190612736919061335c565b60015b6127bc573d8060008114612769576040519150601f19603f3d011682016040523d82523d6000602084013e61276e565b606091505b506000815114156127b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ab90614225565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612811565b600190505b949350505050565b60606000821415612861576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506129c1565b600082905060005b6000821461289357808061287c906146cf565b915050600a8261288c91906144d0565b9150612869565b60008167ffffffffffffffff8111156128d5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156129075781602001600182028036833780820191505090505b5090505b600085146129ba57600182612920919061455b565b9150600a8561292f9190614718565b603061293b919061447a565b60f81b818381518110612977577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856129b391906144d0565b945061290b565b8093505050505b919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad390614265565b60405180910390fd5b612ae581611ddd565b15612b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1c90614245565b60405180910390fd5b60008311612b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5f90614205565b60405180910390fd5b612b756000858386612a5a565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016000820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168152505090506040518060400160405280858360000151612c729190614434565b6fffffffffffffffffffffffffffffffff168152602001858360200151612c999190614434565b6fffffffffffffffffffffffffffffffff16815250600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060208201518160000160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555090505060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020014267ffffffffffffffff168152506003600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050600082905060005b85811015612f0857818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ea86000888488612682565b612ee7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ede90614225565b60405180910390fd5b8180612ef2906146cf565b9250508080612f00906146cf565b915050612e37565b5080600081905550612f1d6000878588612a60565b505050505050565b600080823b905060008111915050919050565b828054612f449061469d565b90600052602060002090601f016020900481019282612f665760008555612fad565b82601f10612f7f57805160ff1916838001178555612fad565b82800160010185558215612fad579182015b82811115612fac578251825591602001919060010190612f91565b5b509050612fba9190612ff8565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613011576000816000905550600101612ff9565b5090565b600061302861302384614371565b614340565b90508281526020810184848401111561304057600080fd5b61304b848285614631565b509392505050565b6000613066613061846143a1565b614340565b90508281526020810184848401111561307e57600080fd5b613089848285614631565b509392505050565b6000813590506130a081614816565b92915050565b6000813590506130b58161482d565b92915050565b6000813590506130ca81614844565b92915050565b6000815190506130df81614844565b92915050565b600082601f8301126130f657600080fd5b8135613106848260208601613015565b91505092915050565b60008151905061311e8161485b565b92915050565b600082601f83011261313557600080fd5b8135613145848260208601613053565b91505092915050565b60008135905061315d81614872565b92915050565b60006020828403121561317557600080fd5b600061318384828501613091565b91505092915050565b6000806040838503121561319f57600080fd5b60006131ad85828601613091565b92505060206131be85828601613091565b9150509250929050565b6000806000606084860312156131dd57600080fd5b60006131eb86828701613091565b93505060206131fc86828701613091565b925050604061320d8682870161314e565b9150509250925092565b6000806000806080858703121561322d57600080fd5b600061323b87828801613091565b945050602061324c87828801613091565b935050604061325d8782880161314e565b925050606085013567ffffffffffffffff81111561327a57600080fd5b613286878288016130e5565b91505092959194509250565b600080604083850312156132a557600080fd5b60006132b385828601613091565b92505060206132c4858286016130a6565b9150509250929050565b600080604083850312156132e157600080fd5b60006132ef85828601613091565b92505060206133008582860161314e565b9150509250929050565b60006020828403121561331c57600080fd5b600061332a848285016130a6565b91505092915050565b60006020828403121561334557600080fd5b6000613353848285016130bb565b91505092915050565b60006020828403121561336e57600080fd5b600061337c848285016130d0565b91505092915050565b60006020828403121561339757600080fd5b60006133a58482850161310f565b91505092915050565b6000602082840312156133c057600080fd5b600082013567ffffffffffffffff8111156133da57600080fd5b6133e684828501613124565b91505092915050565b60006020828403121561340157600080fd5b600061340f8482850161314e565b91505092915050565b6134218161458f565b82525050565b613430816145a1565b82525050565b6000613441826143e6565b61344b81856143fc565b935061345b818560208601614640565b61346481614805565b840191505092915050565b600061347a826143f1565b6134848185614418565b9350613494818560208601614640565b61349d81614805565b840191505092915050565b60006134b3826143f1565b6134bd8185614429565b93506134cd818560208601614640565b80840191505092915050565b600081546134e68161469d565b6134f08186614429565b9450600182166000811461350b576001811461351c5761354f565b60ff1983168652818601935061354f565b613525856143d1565b60005b8381101561354757815481890152600182019150602081019050613528565b838801955050505b50505092915050565b6000613565602283614418565b91507f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008301527f64730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135cb600683614418565b91507f50617573656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b600061360b602683614418565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613671602a83614418565b91507f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008301527f74656e7420746f6b656e000000000000000000000000000000000000000000006020830152604082019050919050565b60006136d7600a83614418565b91507f4e6f2030206d696e7473000000000000000000000000000000000000000000006000830152602082019050919050565b6000613717601683614418565b91507f457863657373206d6178207065722070616964207478000000000000000000006000830152602082019050919050565b6000613757602383614418565b91507f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008301527f6e647300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137bd602583614418565b91507f455243373231413a207472616e7366657220746f20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613823601683614418565b91507f457863657373206d6178207065722066726565207478000000000000000000006000830152602082019050919050565b6000613863603983614418565b91507f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006020830152604082019050919050565b60006138c9601283614418565b91507f45786365656473206d617820737570706c7900000000000000000000000000006000830152602082019050919050565b6000613909602b83614418565b91507f455243373231413a2062616c616e636520717565727920666f7220746865207a60008301527f65726f20616464726573730000000000000000000000000000000000000000006020830152604082019050919050565b600061396f601583614418565b91507f546f6b656e20646f6573206e6f742065786973742e00000000000000000000006000830152602082019050919050565b60006139af602683614418565b91507f455243373231413a207472616e736665722066726f6d20696e636f727265637460008301527f206f776e657200000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a15602083614418565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613a55601a83614418565b91507f455243373231413a20617070726f766520746f2063616c6c65720000000000006000830152602082019050919050565b6000613a95603283614418565b91507f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008301527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006020830152604082019050919050565b6000613afb601683614418565b91507f496e76616c69642066756e64732070726f7669646564000000000000000000006000830152602082019050919050565b6000613b3b602283614418565b91507f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008301527f65720000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613ba160008361440d565b9150600082019050919050565b6000613bbb602383614418565b91507f455243373231413a207175616e74697479206d7573742062652067726561746560008301527f72203000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c21603383614418565b91507f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008301527f6563656976657220696d706c656d656e746572000000000000000000000000006020830152604082019050919050565b6000613c87601d83614418565b91507f455243373231413a20746f6b656e20616c7265616479206d696e7465640000006000830152602082019050919050565b6000613cc7602183614418565b91507f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d2d600e83614418565b91507f4661696c656420746f2073656e640000000000000000000000000000000000006000830152602082019050919050565b6000613d6d602e83614418565b91507f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008301527f6f776e657220627920696e6465780000000000000000000000000000000000006020830152604082019050919050565b6000613dd3601683614418565b91507f45786365656473206d6178207065722077616c6c6574000000000000000000006000830152602082019050919050565b6000613e13602d83614418565b91507f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008301527f78697374656e7420746f6b656e000000000000000000000000000000000000006020830152604082019050919050565b6000613e79600c83614418565b91507f4e6f20636f6e74726163747300000000000000000000000000000000000000006000830152602082019050919050565b613eb581614627565b82525050565b6000613ec782866134d9565b9150613ed382856134a8565b9150613edf82846134a8565b9150819050949350505050565b6000613ef782613b94565b9150819050919050565b6000602082019050613f166000830184613418565b92915050565b6000608082019050613f316000830187613418565b613f3e6020830186613418565b613f4b6040830185613eac565b8181036060830152613f5d8184613436565b905095945050505050565b6000602082019050613f7d6000830184613427565b92915050565b60006020820190508181036000830152613f9d818461346f565b905092915050565b60006020820190508181036000830152613fbe81613558565b9050919050565b60006020820190508181036000830152613fde816135be565b9050919050565b60006020820190508181036000830152613ffe816135fe565b9050919050565b6000602082019050818103600083015261401e81613664565b9050919050565b6000602082019050818103600083015261403e816136ca565b9050919050565b6000602082019050818103600083015261405e8161370a565b9050919050565b6000602082019050818103600083015261407e8161374a565b9050919050565b6000602082019050818103600083015261409e816137b0565b9050919050565b600060208201905081810360008301526140be81613816565b9050919050565b600060208201905081810360008301526140de81613856565b9050919050565b600060208201905081810360008301526140fe816138bc565b9050919050565b6000602082019050818103600083015261411e816138fc565b9050919050565b6000602082019050818103600083015261413e81613962565b9050919050565b6000602082019050818103600083015261415e816139a2565b9050919050565b6000602082019050818103600083015261417e81613a08565b9050919050565b6000602082019050818103600083015261419e81613a48565b9050919050565b600060208201905081810360008301526141be81613a88565b9050919050565b600060208201905081810360008301526141de81613aee565b9050919050565b600060208201905081810360008301526141fe81613b2e565b9050919050565b6000602082019050818103600083015261421e81613bae565b9050919050565b6000602082019050818103600083015261423e81613c14565b9050919050565b6000602082019050818103600083015261425e81613c7a565b9050919050565b6000602082019050818103600083015261427e81613cba565b9050919050565b6000602082019050818103600083015261429e81613d20565b9050919050565b600060208201905081810360008301526142be81613d60565b9050919050565b600060208201905081810360008301526142de81613dc6565b9050919050565b600060208201905081810360008301526142fe81613e06565b9050919050565b6000602082019050818103600083015261431e81613e6c565b9050919050565b600060208201905061433a6000830184613eac565b92915050565b6000604051905081810181811067ffffffffffffffff82111715614367576143666147d6565b5b8060405250919050565b600067ffffffffffffffff82111561438c5761438b6147d6565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156143bc576143bb6147d6565b5b601f19601f8301169050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061443f826145eb565b915061444a836145eb565b9250826fffffffffffffffffffffffffffffffff0382111561446f5761446e614749565b5b828201905092915050565b600061448582614627565b915061449083614627565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144c5576144c4614749565b5b828201905092915050565b60006144db82614627565b91506144e683614627565b9250826144f6576144f5614778565b5b828204905092915050565b600061450c82614627565b915061451783614627565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145505761454f614749565b5b828202905092915050565b600061456682614627565b915061457183614627565b92508282101561458457614583614749565b5b828203905092915050565b600061459a82614607565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006145e48261458f565b9050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561465e578082015181840152602081019050614643565b8381111561466d576000848401525b50505050565b600061467e82614627565b9150600082141561469257614691614749565b5b600182039050919050565b600060028204905060018216806146b557607f821691505b602082108114156146c9576146c86147a7565b5b50919050565b60006146da82614627565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561470d5761470c614749565b5b600182019050919050565b600061472382614627565b915061472e83614627565b92508261473e5761473d614778565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61481f8161458f565b811461482a57600080fd5b50565b614836816145a1565b811461484157600080fd5b50565b61484d816145ad565b811461485857600080fd5b50565b614864816145d9565b811461486f57600080fd5b50565b61487b81614627565b811461488657600080fd5b5056fea2646970667358221220c037576c3bcef4829a4462d21d12f78b56d72961d156fcc8a828cf5e3090436264736f6c63430008000033

Deployed Bytecode Sourcemap

38186:2990:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26198:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40490:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27825:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29386:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28907:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38616:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24639:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30262:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25303:823;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38763:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40273:209;;;;;;;;;;;;;:::i;:::-;;30495:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38566:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24816:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40579:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38863:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27634:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38238:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26634:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2676:103;;;;;;;;;;;;;:::i;:::-;;38711:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2025:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40687:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27994:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38811:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39005:811;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29672:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30743:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38415:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40811:362;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38468:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38325:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39824:441;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2934:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38666:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38893:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26198:372;26300:4;26352:25;26337:40;;;:11;:40;;;;:105;;;;26409:33;26394:48;;;:11;:48;;;;26337:105;:172;;;;26474:35;26459:50;;;:11;:50;;;;26337:172;:225;;;;26526:36;26550:11;26526:23;:36::i;:::-;26337:225;26317:245;;26198:372;;;:::o;40490:81::-;2256:12;:10;:12::i;:::-;2245:23;;:7;:5;:7::i;:::-;:23;;;2237:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40557:6:::1;40548;;:15;;;;;;;;;;;;;;;;;;40490:81:::0;:::o;27825:100::-;27879:13;27912:5;27905:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27825:100;:::o;29386:214::-;29454:7;29482:16;29490:7;29482;:16::i;:::-;29474:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29568:15;:24;29584:7;29568:24;;;;;;;;;;;;;;;;;;;;;29561:31;;29386:214;;;:::o;28907:413::-;28980:13;28996:24;29012:7;28996:15;:24::i;:::-;28980:40;;29045:5;29039:11;;:2;:11;;;;29031:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29140:5;29124:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29149:37;29166:5;29173:12;:10;:12::i;:::-;29149:16;:37::i;:::-;29124:62;29102:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;29284:28;29293:2;29297:7;29306:5;29284:8;:28::i;:::-;28907:413;;;:::o;38616:43::-;38657:2;38616:43;:::o;24639:100::-;24692:7;24719:12;;24712:19;;24639:100;:::o;30262:162::-;30388:28;30398:4;30404:2;30408:7;30388:9;:28::i;:::-;30262:162;;;:::o;25303:823::-;25392:7;25428:16;25438:5;25428:9;:16::i;:::-;25420:5;:24;25412:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25494:22;25519:13;:11;:13::i;:::-;25494:38;;25543:19;25577:25;25631:9;25626:426;25650:14;25646:1;:18;25626:426;;;25686:31;25720:11;:14;25732:1;25720:14;;;;;;;;;;;25686:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25779:1;25753:28;;:9;:14;;;:28;;;25749:103;;25822:9;:14;;;25802:34;;25749:103;25891:5;25870:26;;:17;:26;;;25866:175;;;25936:5;25921:11;:20;25917:77;;;25973:1;25966:8;;;;;;;;;25917:77;26012:13;;;;;:::i;:::-;;;;25866:175;25626:426;25666:3;;;;;:::i;:::-;;;;25626:426;;;;26062:56;;;;;;;;;;:::i;:::-;;;;;;;;25303:823;;;;;:::o;38763:41::-;38800:4;38763:41;:::o;40273:209::-;2256:12;:10;:12::i;:::-;2245:23;;:7;:5;:7::i;:::-;:23;;;2237:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40323:15:::1;40341:21;40323:39;;40374:12;40392;:10;:12::i;:::-;:17;;40417:7;40392:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40373:56;;;40448:7;40440:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;2316:1;;40273:209::o:0;30495:177::-;30625:39;30642:4;30648:2;30652:7;30625:39;;;;;;;;;;;;:16;:39::i;:::-;30495:177;;;:::o;38566:43::-;38608:1;38566:43;:::o;24816:187::-;24883:7;24919:13;:11;:13::i;:::-;24911:5;:21;24903:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;24990:5;24983:12;;24816:187;;;:::o;40579:100::-;2256:12;:10;:12::i;:::-;2245:23;;:7;:5;:7::i;:::-;:23;;;2237:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40663:8:::1;40653:7;:18;;;;;;;;;;;;:::i;:::-;;40579:100:::0;:::o;38863:26::-;;;;;;;;;;;;;:::o;27634:124::-;27698:7;27725:20;27737:7;27725:11;:20::i;:::-;:25;;;27718:32;;27634:124;;;:::o;38238:80::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26634:221::-;26698:7;26743:1;26726:19;;:5;:19;;;;26718:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;26819:12;:19;26832:5;26819:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;26811:36;;26804:43;;26634:221;;;:::o;2676:103::-;2256:12;:10;:12::i;:::-;2245:23;;:7;:5;:7::i;:::-;:23;;;2237:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2741:30:::1;2768:1;2741:18;:30::i;:::-;2676:103::o:0;38711:45::-;38753:3;38711:45;:::o;2025:87::-;2071:7;2098:6;;;;;;;;;;;2091:13;;2025:87;:::o;40687:116::-;2256:12;:10;:12::i;:::-;2245:23;;:7;:5;:7::i;:::-;:23;;;2237:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40783:12:::1;40769:11;:26;;;;;;;;;;;;:::i;:::-;;40687:116:::0;:::o;27994:104::-;28050:13;28083:7;28076:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27994:104;:::o;38811:43::-;38843:11;38811:43;:::o;39005:811::-;39064:15;39082:12;:10;:12::i;:::-;39064:30;;39114:6;;;;;;;;;;;39113:7;39105:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;39180:7;39164:13;:11;:13::i;:::-;:23;;;;:::i;:::-;38800:4;39150:37;;39142:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39239:1;39229:7;:11;39221:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;39287:7;39274:20;;:9;:20;;;39266:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;38657:2;39361:7;39333:13;:25;39347:10;39333:25;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;:53;;39325:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;39450:13;:11;:13::i;:::-;38753:3;39431:32;39428:291;;39506:7;38608:1;39487:26;;39479:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39428:291;;;39594:7;38703:1;39580:21;;39572:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;39671:9;38843:11;39652:7;:15;;;;:::i;:::-;:28;39644:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39428:291;39761:7;39732:13;:25;39746:10;39732:25;;;;;;;;;;;;;;;;:36;;;;;;;:::i;:::-;;;;;;;;39781:27;39791:7;39800;39781:9;:27::i;:::-;39005:811;;:::o;29672:288::-;29779:12;:10;:12::i;:::-;29767:24;;:8;:24;;;;29759:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;29880:8;29835:18;:32;29854:12;:10;:12::i;:::-;29835:32;;;;;;;;;;;;;;;:42;29868:8;29835:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29933:8;29904:48;;29919:12;:10;:12::i;:::-;29904:48;;;29943:8;29904:48;;;;;;:::i;:::-;;;;;;;;29672:288;;:::o;30743:355::-;30902:28;30912:4;30918:2;30922:7;30902:9;:28::i;:::-;30963:48;30986:4;30992:2;30996:7;31005:5;30963:22;:48::i;:::-;30941:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;30743:355;;;;:::o;38415:46::-;;;;;;;;;;;;;;;;;;;:::o;40811:362::-;40877:13;40911:17;40919:8;40911:7;:17::i;:::-;40903:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;40996:1;40978:7;40972:21;;;;;:::i;:::-;;;:25;:193;;;;;;;;;;;;;;;;;41054:7;41078:26;41095:8;41078:16;:26::i;:::-;41121:13;;;;;;;;;;;;;;;;;41021:128;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40972:193;40965:200;;40811:362;;;:::o;38468:89::-;38515:42;38468:89;:::o;38325:83::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39824:441::-;39949:4;40034:27;38515:42;40034:65;;40155:8;40114:49;;40122:13;:21;;;40144:5;40122:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40114:49;;;40110:89;;;40187:4;40180:11;;;;;40110:89;40218:39;40241:5;40248:8;40218:22;:39::i;:::-;40211:46;;;39824:441;;;;;:::o;2934:201::-;2256:12;:10;:12::i;:::-;2245:23;;:7;:5;:7::i;:::-;:23;;;2237:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3043:1:::1;3023:22;;:8;:22;;;;3015:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3099:28;3118:8;3099:18;:28::i;:::-;2934:201:::0;:::o;38666:38::-;38703:1;38666:38;:::o;38893:48::-;;;;;;;;;;;;;;;;;:::o;22702:157::-;22787:4;22826:25;22811:40;;;:11;:40;;;;22804:47;;22702:157;;;:::o;766:98::-;819:7;846:10;839:17;;766:98;:::o;31353:111::-;31410:4;31444:12;;31434:7;:22;31427:29;;31353:111;;;:::o;35397:196::-;35539:2;35512:15;:24;35528:7;35512:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35577:7;35573:2;35557:28;;35566:5;35557:28;;;;;;;;;;;;35397:196;;;:::o;33496:1783::-;33611:35;33649:20;33661:7;33649:11;:20::i;:::-;33611:58;;33682:22;33724:13;:18;;;33708:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;33783:12;:10;:12::i;:::-;33759:36;;:20;33771:7;33759:11;:20::i;:::-;:36;;;33708:87;:154;;;;33812:50;33829:13;:18;;;33849:12;:10;:12::i;:::-;33812:16;:50::i;:::-;33708:154;33682:181;;33884:17;33876:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;33999:4;33977:26;;:13;:18;;;:26;;;33969:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;34079:1;34065:16;;:2;:16;;;;34057:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34136:43;34158:4;34164:2;34168:7;34177:1;34136:21;:43::i;:::-;34244:49;34261:1;34265:7;34274:13;:18;;;34244:8;:49::i;:::-;34528:1;34498:12;:18;34511:4;34498:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34572:1;34544:12;:16;34557:2;34544:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34620:43;;;;;;;;34635:2;34620:43;;;;;;34646:15;34620:43;;;;;34597:11;:20;34609:7;34597:20;;;;;;;;;;;:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34903:19;34935:1;34925:7;:11;;;;:::i;:::-;34903:33;;34992:1;34951:43;;:11;:24;34963:11;34951:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;34947:227;;;35015:20;35023:11;35015:7;:20::i;:::-;35011:152;;;35083:64;;;;;;;;35098:13;:18;;;35083:64;;;;;;35118:13;:28;;;35083:64;;;;;35056:11;:24;35068:11;35056:24;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35011:152;34947:227;35210:7;35206:2;35191:27;;35200:4;35191:27;;;;;;;;;;;;35229:42;35250:4;35256:2;35260:7;35269:1;35229:20;:42::i;:::-;33496:1783;;;;;;:::o;27100:472::-;27161:21;;:::i;:::-;27203:16;27211:7;27203;:16::i;:::-;27195:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27284:12;27299:7;27284:22;;27279:216;27333:31;27367:11;:17;27379:4;27367:17;;;;;;;;;;;27333:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27429:1;27403:28;;:9;:14;;;:28;;;27399:85;;27459:9;27452:16;;;;;;27399:85;27279:216;27310:6;;;;;:::i;:::-;;;;27279:216;;27100:472;;;;:::o;3295:191::-;3369:16;3388:6;;;;;;;;;;;3369:25;;3414:8;3405:6;;:17;;;;;;;;;;;;;;;;;;3469:8;3438:40;;3459:8;3438:40;;;;;;;;;;;;3295:191;;:::o;31472:104::-;31541:27;31551:2;31555:8;31541:27;;;;;;;;;;;;:9;:27::i;:::-;31472:104;;:::o;36158:804::-;36313:4;36334:15;:2;:13;;;:15::i;:::-;36330:625;;;36386:2;36370:36;;;36407:12;:10;:12::i;:::-;36421:4;36427:7;36436:5;36370:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36366:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36633:1;36616:6;:13;:18;36612:273;;;36659:61;;;;;;;;;;:::i;:::-;;;;;;;;36612:273;36835:6;36829:13;36820:6;36816:2;36812:15;36805:38;36366:534;36503:45;;;36493:55;;;:6;:55;;;;36486:62;;;;;36330:625;36939:4;36932:11;;36158:804;;;;;;;:::o;3843:723::-;3899:13;4129:1;4120:5;:10;4116:53;;;4147:10;;;;;;;;;;;;;;;;;;;;;4116:53;4179:12;4194:5;4179:20;;4210:14;4235:78;4250:1;4242:4;:9;4235:78;;4268:8;;;;;:::i;:::-;;;;4299:2;4291:10;;;;;:::i;:::-;;;4235:78;;;4323:19;4355:6;4345:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4323:39;;4373:154;4389:1;4380:5;:10;4373:154;;4417:1;4407:11;;;;;:::i;:::-;;;4484:2;4476:5;:10;;;;:::i;:::-;4463:2;:24;;;;:::i;:::-;4450:39;;4433:6;4440;4433:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;4513:2;4504:11;;;;;:::i;:::-;;;4373:154;;;4551:6;4537:21;;;;;3843:723;;;;:::o;30031:164::-;30128:4;30152:18;:25;30171:5;30152:25;;;;;;;;;;;;;;;:35;30178:8;30152:35;;;;;;;;;;;;;;;;;;;;;;;;;30145:42;;30031:164;;;;:::o;37450:159::-;;;;;:::o;38021:158::-;;;;;:::o;31853:1389::-;31976:20;31999:12;;31976:35;;32044:1;32030:16;;:2;:16;;;;32022:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32229:21;32237:12;32229:7;:21::i;:::-;32228:22;32220:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32314:1;32303:8;:12;32295:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;32368:61;32398:1;32402:2;32406:12;32420:8;32368:21;:61::i;:::-;32442:30;32475:12;:16;32488:2;32475:16;;;;;;;;;;;;;;;32442:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32521:135;;;;;;;;32577:8;32547:11;:19;;;:39;;;;:::i;:::-;32521:135;;;;;;32636:8;32601:11;:24;;;:44;;;;:::i;:::-;32521:135;;;;;32502:12;:16;32515:2;32502:16;;;;;;;;;;;;;;;:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32695:43;;;;;;;;32710:2;32695:43;;;;;;32721:15;32695:43;;;;;32667:11;:25;32679:12;32667:25;;;;;;;;;;;:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32751:20;32774:12;32751:35;;32804:9;32799:325;32823:8;32819:1;:12;32799:325;;;32883:12;32879:2;32858:38;;32875:1;32858:38;;;;;;;;;;;;32937:59;32968:1;32972:2;32976:12;32990:5;32937:22;:59::i;:::-;32911:172;;;;;;;;;;;;:::i;:::-;;;;;;;;;33098:14;;;;;:::i;:::-;;;;32833:3;;;;;:::i;:::-;;;;32799:325;;;;33151:12;33136;:27;;;;33174:60;33203:1;33207:2;33211:12;33225:8;33174:20;:60::i;:::-;31853:1389;;;;;;:::o;14594:387::-;14654:4;14862:12;14929:7;14917:20;14909:28;;14972:1;14965:4;:8;14958:15;;;14594:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1569:201::-;;1686:6;1680:13;1671:22;;1702:62;1758:5;1702:62;:::i;:::-;1661:109;;;;:::o;1790:273::-;;1895:3;1888:4;1880:6;1876:17;1872:27;1862:2;;1913:1;1910;1903:12;1862:2;1953:6;1940:20;1978:79;2053:3;2045:6;2038:4;2030:6;2026:17;1978:79;:::i;:::-;1969:88;;1852:211;;;;;:::o;2069:139::-;;2153:6;2140:20;2131:29;;2169:33;2196:5;2169:33;:::i;:::-;2121:87;;;;:::o;2214:262::-;;2322:2;2310:9;2301:7;2297:23;2293:32;2290:2;;;2338:1;2335;2328:12;2290:2;2381:1;2406:53;2451:7;2442:6;2431:9;2427:22;2406:53;:::i;:::-;2396:63;;2352:117;2280:196;;;;:::o;2482:407::-;;;2607:2;2595:9;2586:7;2582:23;2578:32;2575:2;;;2623:1;2620;2613:12;2575:2;2666:1;2691:53;2736:7;2727:6;2716:9;2712:22;2691:53;:::i;:::-;2681:63;;2637:117;2793:2;2819:53;2864:7;2855:6;2844:9;2840:22;2819:53;:::i;:::-;2809:63;;2764:118;2565:324;;;;;:::o;2895:552::-;;;;3037:2;3025:9;3016:7;3012:23;3008:32;3005:2;;;3053:1;3050;3043:12;3005:2;3096:1;3121:53;3166:7;3157:6;3146:9;3142:22;3121:53;:::i;:::-;3111:63;;3067:117;3223:2;3249:53;3294:7;3285:6;3274:9;3270:22;3249:53;:::i;:::-;3239:63;;3194:118;3351:2;3377:53;3422:7;3413:6;3402:9;3398:22;3377:53;:::i;:::-;3367:63;;3322:118;2995:452;;;;;:::o;3453:809::-;;;;;3621:3;3609:9;3600:7;3596:23;3592:33;3589:2;;;3638:1;3635;3628:12;3589:2;3681:1;3706:53;3751:7;3742:6;3731:9;3727:22;3706:53;:::i;:::-;3696:63;;3652:117;3808:2;3834:53;3879:7;3870:6;3859:9;3855:22;3834:53;:::i;:::-;3824:63;;3779:118;3936:2;3962:53;4007:7;3998:6;3987:9;3983:22;3962:53;:::i;:::-;3952:63;;3907:118;4092:2;4081:9;4077:18;4064:32;4123:18;4115:6;4112:30;4109:2;;;4155:1;4152;4145:12;4109:2;4183:62;4237:7;4228:6;4217:9;4213:22;4183:62;:::i;:::-;4173:72;;4035:220;3579:683;;;;;;;:::o;4268:401::-;;;4390:2;4378:9;4369:7;4365:23;4361:32;4358:2;;;4406:1;4403;4396:12;4358:2;4449:1;4474:53;4519:7;4510:6;4499:9;4495:22;4474:53;:::i;:::-;4464:63;;4420:117;4576:2;4602:50;4644:7;4635:6;4624:9;4620:22;4602:50;:::i;:::-;4592:60;;4547:115;4348:321;;;;;:::o;4675:407::-;;;4800:2;4788:9;4779:7;4775:23;4771:32;4768:2;;;4816:1;4813;4806:12;4768:2;4859:1;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4830:117;4986:2;5012:53;5057:7;5048:6;5037:9;5033:22;5012:53;:::i;:::-;5002:63;;4957:118;4758:324;;;;;:::o;5088:256::-;;5193:2;5181:9;5172:7;5168:23;5164:32;5161:2;;;5209:1;5206;5199:12;5161:2;5252:1;5277:50;5319:7;5310:6;5299:9;5295:22;5277:50;:::i;:::-;5267:60;;5223:114;5151:193;;;;:::o;5350:260::-;;5457:2;5445:9;5436:7;5432:23;5428:32;5425:2;;;5473:1;5470;5463:12;5425:2;5516:1;5541:52;5585:7;5576:6;5565:9;5561:22;5541:52;:::i;:::-;5531:62;;5487:116;5415:195;;;;:::o;5616:282::-;;5734:2;5722:9;5713:7;5709:23;5705:32;5702:2;;;5750:1;5747;5740:12;5702:2;5793:1;5818:63;5873:7;5864:6;5853:9;5849:22;5818:63;:::i;:::-;5808:73;;5764:127;5692:206;;;;:::o;5904:342::-;;6052:2;6040:9;6031:7;6027:23;6023:32;6020:2;;;6068:1;6065;6058:12;6020:2;6111:1;6136:93;6221:7;6212:6;6201:9;6197:22;6136:93;:::i;:::-;6126:103;;6082:157;6010:236;;;;:::o;6252:375::-;;6370:2;6358:9;6349:7;6345:23;6341:32;6338:2;;;6386:1;6383;6376:12;6338:2;6457:1;6446:9;6442:17;6429:31;6487:18;6479:6;6476:30;6473:2;;;6519:1;6516;6509:12;6473:2;6547:63;6602:7;6593:6;6582:9;6578:22;6547:63;:::i;:::-;6537:73;;6400:220;6328:299;;;;:::o;6633:262::-;;6741:2;6729:9;6720:7;6716:23;6712:32;6709:2;;;6757:1;6754;6747:12;6709:2;6800:1;6825:53;6870:7;6861:6;6850:9;6846:22;6825:53;:::i;:::-;6815:63;;6771:117;6699:196;;;;:::o;6901:118::-;6988:24;7006:5;6988:24;:::i;:::-;6983:3;6976:37;6966:53;;:::o;7025:109::-;7106:21;7121:5;7106:21;:::i;:::-;7101:3;7094:34;7084:50;;:::o;7140:360::-;;7254:38;7286:5;7254:38;:::i;:::-;7308:70;7371:6;7366:3;7308:70;:::i;:::-;7301:77;;7387:52;7432:6;7427:3;7420:4;7413:5;7409:16;7387:52;:::i;:::-;7464:29;7486:6;7464:29;:::i;:::-;7459:3;7455:39;7448:46;;7230:270;;;;;:::o;7506:364::-;;7622:39;7655:5;7622:39;:::i;:::-;7677:71;7741:6;7736:3;7677:71;:::i;:::-;7670:78;;7757:52;7802:6;7797:3;7790:4;7783:5;7779:16;7757:52;:::i;:::-;7834:29;7856:6;7834:29;:::i;:::-;7829:3;7825:39;7818:46;;7598:272;;;;;:::o;7876:377::-;;8010:39;8043:5;8010:39;:::i;:::-;8065:89;8147:6;8142:3;8065:89;:::i;:::-;8058:96;;8163:52;8208:6;8203:3;8196:4;8189:5;8185:16;8163:52;:::i;:::-;8240:6;8235:3;8231:16;8224:23;;7986:267;;;;;:::o;8283:845::-;;8423:5;8417:12;8452:36;8478:9;8452:36;:::i;:::-;8504:89;8586:6;8581:3;8504:89;:::i;:::-;8497:96;;8624:1;8613:9;8609:17;8640:1;8635:137;;;;8786:1;8781:341;;;;8602:520;;8635:137;8719:4;8715:9;8704;8700:25;8695:3;8688:38;8755:6;8750:3;8746:16;8739:23;;8635:137;;8781:341;8848:38;8880:5;8848:38;:::i;:::-;8908:1;8922:154;8936:6;8933:1;8930:13;8922:154;;;9010:7;9004:14;9000:1;8995:3;8991:11;8984:35;9060:1;9051:7;9047:15;9036:26;;8958:4;8955:1;8951:12;8946:17;;8922:154;;;9105:6;9100:3;9096:16;9089:23;;8788:334;;8602:520;;8390:738;;;;;;:::o;9134:366::-;;9297:67;9361:2;9356:3;9297:67;:::i;:::-;9290:74;;9394:34;9390:1;9385:3;9381:11;9374:55;9460:4;9455:2;9450:3;9446:12;9439:26;9491:2;9486:3;9482:12;9475:19;;9280:220;;;:::o;9506:303::-;;9669:66;9733:1;9728:3;9669:66;:::i;:::-;9662:73;;9765:8;9761:1;9756:3;9752:11;9745:29;9800:2;9795:3;9791:12;9784:19;;9652:157;;;:::o;9815:370::-;;9978:67;10042:2;10037:3;9978:67;:::i;:::-;9971:74;;10075:34;10071:1;10066:3;10062:11;10055:55;10141:8;10136:2;10131:3;10127:12;10120:30;10176:2;10171:3;10167:12;10160:19;;9961:224;;;:::o;10191:374::-;;10354:67;10418:2;10413:3;10354:67;:::i;:::-;10347:74;;10451:34;10447:1;10442:3;10438:11;10431:55;10517:12;10512:2;10507:3;10503:12;10496:34;10556:2;10551:3;10547:12;10540:19;;10337:228;;;:::o;10571:308::-;;10734:67;10798:2;10793:3;10734:67;:::i;:::-;10727:74;;10831:12;10827:1;10822:3;10818:11;10811:33;10870:2;10865:3;10861:12;10854:19;;10717:162;;;:::o;10885:320::-;;11048:67;11112:2;11107:3;11048:67;:::i;:::-;11041:74;;11145:24;11141:1;11136:3;11132:11;11125:45;11196:2;11191:3;11187:12;11180:19;;11031:174;;;:::o;11211:367::-;;11374:67;11438:2;11433:3;11374:67;:::i;:::-;11367:74;;11471:34;11467:1;11462:3;11458:11;11451:55;11537:5;11532:2;11527:3;11523:12;11516:27;11569:2;11564:3;11560:12;11553:19;;11357:221;;;:::o;11584:369::-;;11747:67;11811:2;11806:3;11747:67;:::i;:::-;11740:74;;11844:34;11840:1;11835:3;11831:11;11824:55;11910:7;11905:2;11900:3;11896:12;11889:29;11944:2;11939:3;11935:12;11928:19;;11730:223;;;:::o;11959:320::-;;12122:67;12186:2;12181:3;12122:67;:::i;:::-;12115:74;;12219:24;12215:1;12210:3;12206:11;12199:45;12270:2;12265:3;12261:12;12254:19;;12105:174;;;:::o;12285:389::-;;12448:67;12512:2;12507:3;12448:67;:::i;:::-;12441:74;;12545:34;12541:1;12536:3;12532:11;12525:55;12611:27;12606:2;12601:3;12597:12;12590:49;12665:2;12660:3;12656:12;12649:19;;12431:243;;;:::o;12680:316::-;;12843:67;12907:2;12902:3;12843:67;:::i;:::-;12836:74;;12940:20;12936:1;12931:3;12927:11;12920:41;12987:2;12982:3;12978:12;12971:19;;12826:170;;;:::o;13002:375::-;;13165:67;13229:2;13224:3;13165:67;:::i;:::-;13158:74;;13262:34;13258:1;13253:3;13249:11;13242:55;13328:13;13323:2;13318:3;13314:12;13307:35;13368:2;13363:3;13359:12;13352:19;;13148:229;;;:::o;13383:319::-;;13546:67;13610:2;13605:3;13546:67;:::i;:::-;13539:74;;13643:23;13639:1;13634:3;13630:11;13623:44;13693:2;13688:3;13684:12;13677:19;;13529:173;;;:::o;13708:370::-;;13871:67;13935:2;13930:3;13871:67;:::i;:::-;13864:74;;13968:34;13964:1;13959:3;13955:11;13948:55;14034:8;14029:2;14024:3;14020:12;14013:30;14069:2;14064:3;14060:12;14053:19;;13854:224;;;:::o;14084:330::-;;14247:67;14311:2;14306:3;14247:67;:::i;:::-;14240:74;;14344:34;14340:1;14335:3;14331:11;14324:55;14405:2;14400:3;14396:12;14389:19;;14230:184;;;:::o;14420:324::-;;14583:67;14647:2;14642:3;14583:67;:::i;:::-;14576:74;;14680:28;14676:1;14671:3;14667:11;14660:49;14735:2;14730:3;14726:12;14719:19;;14566:178;;;:::o;14750:382::-;;14913:67;14977:2;14972:3;14913:67;:::i;:::-;14906:74;;15010:34;15006:1;15001:3;14997:11;14990:55;15076:20;15071:2;15066:3;15062:12;15055:42;15123:2;15118:3;15114:12;15107:19;;14896:236;;;:::o;15138:320::-;;15301:67;15365:2;15360:3;15301:67;:::i;:::-;15294:74;;15398:24;15394:1;15389:3;15385:11;15378:45;15449:2;15444:3;15440:12;15433:19;;15284:174;;;:::o;15464:366::-;;15627:67;15691:2;15686:3;15627:67;:::i;:::-;15620:74;;15724:34;15720:1;15715:3;15711:11;15704:55;15790:4;15785:2;15780:3;15776:12;15769:26;15821:2;15816:3;15812:12;15805:19;;15610:220;;;:::o;15836:297::-;;16016:83;16097:1;16092:3;16016:83;:::i;:::-;16009:90;;16125:1;16120:3;16116:11;16109:18;;15999:134;;;:::o;16139:367::-;;16302:67;16366:2;16361:3;16302:67;:::i;:::-;16295:74;;16399:34;16395:1;16390:3;16386:11;16379:55;16465:5;16460:2;16455:3;16451:12;16444:27;16497:2;16492:3;16488:12;16481:19;;16285:221;;;:::o;16512:383::-;;16675:67;16739:2;16734:3;16675:67;:::i;:::-;16668:74;;16772:34;16768:1;16763:3;16759:11;16752:55;16838:21;16833:2;16828:3;16824:12;16817:43;16886:2;16881:3;16877:12;16870:19;;16658:237;;;:::o;16901:327::-;;17064:67;17128:2;17123:3;17064:67;:::i;:::-;17057:74;;17161:31;17157:1;17152:3;17148:11;17141:52;17219:2;17214:3;17210:12;17203:19;;17047:181;;;:::o;17234:365::-;;17397:67;17461:2;17456:3;17397:67;:::i;:::-;17390:74;;17494:34;17490:1;17485:3;17481:11;17474:55;17560:3;17555:2;17550:3;17546:12;17539:25;17590:2;17585:3;17581:12;17574:19;;17380:219;;;:::o;17605:312::-;;17768:67;17832:2;17827:3;17768:67;:::i;:::-;17761:74;;17865:16;17861:1;17856:3;17852:11;17845:37;17908:2;17903:3;17899:12;17892:19;;17751:166;;;:::o;17923:378::-;;18086:67;18150:2;18145:3;18086:67;:::i;:::-;18079:74;;18183:34;18179:1;18174:3;18170:11;18163:55;18249:16;18244:2;18239:3;18235:12;18228:38;18292:2;18287:3;18283:12;18276:19;;18069:232;;;:::o;18307:320::-;;18470:67;18534:2;18529:3;18470:67;:::i;:::-;18463:74;;18567:24;18563:1;18558:3;18554:11;18547:45;18618:2;18613:3;18609:12;18602:19;;18453:174;;;:::o;19018:377::-;;19181:67;19245:2;19240:3;19181:67;:::i;:::-;19174:74;;19278:34;19274:1;19269:3;19265:11;19258:55;19344:15;19339:2;19334:3;19330:12;19323:37;19386:2;19381:3;19377:12;19370:19;;19164:231;;;:::o;19401:310::-;;19564:67;19628:2;19623:3;19564:67;:::i;:::-;19557:74;;19661:14;19657:1;19652:3;19648:11;19641:35;19702:2;19697:3;19693:12;19686:19;;19547:164;;;:::o;19717:118::-;19804:24;19822:5;19804:24;:::i;:::-;19799:3;19792:37;19782:53;;:::o;19841:589::-;;20088:92;20176:3;20167:6;20088:92;:::i;:::-;20081:99;;20197:95;20288:3;20279:6;20197:95;:::i;:::-;20190:102;;20309:95;20400:3;20391:6;20309:95;:::i;:::-;20302:102;;20421:3;20414:10;;20070:360;;;;;;:::o;20436:379::-;;20642:147;20785:3;20642:147;:::i;:::-;20635:154;;20806:3;20799:10;;20624:191;;;:::o;20821:222::-;;20952:2;20941:9;20937:18;20929:26;;20965:71;21033:1;21022:9;21018:17;21009:6;20965:71;:::i;:::-;20919:124;;;;:::o;21049:640::-;;21282:3;21271:9;21267:19;21259:27;;21296:71;21364:1;21353:9;21349:17;21340:6;21296:71;:::i;:::-;21377:72;21445:2;21434:9;21430:18;21421:6;21377:72;:::i;:::-;21459;21527:2;21516:9;21512:18;21503:6;21459:72;:::i;:::-;21578:9;21572:4;21568:20;21563:2;21552:9;21548:18;21541:48;21606:76;21677:4;21668:6;21606:76;:::i;:::-;21598:84;;21249:440;;;;;;;:::o;21695:210::-;;21820:2;21809:9;21805:18;21797:26;;21833:65;21895:1;21884:9;21880:17;21871:6;21833:65;:::i;:::-;21787:118;;;;:::o;21911:313::-;;22062:2;22051:9;22047:18;22039:26;;22111:9;22105:4;22101:20;22097:1;22086:9;22082:17;22075:47;22139:78;22212:4;22203:6;22139:78;:::i;:::-;22131:86;;22029:195;;;;:::o;22230:419::-;;22434:2;22423:9;22419:18;22411:26;;22483:9;22477:4;22473:20;22469:1;22458:9;22454:17;22447:47;22511:131;22637:4;22511:131;:::i;:::-;22503:139;;22401:248;;;:::o;22655:419::-;;22859:2;22848:9;22844:18;22836:26;;22908:9;22902:4;22898:20;22894:1;22883:9;22879:17;22872:47;22936:131;23062:4;22936:131;:::i;:::-;22928:139;;22826:248;;;:::o;23080:419::-;;23284:2;23273:9;23269:18;23261:26;;23333:9;23327:4;23323:20;23319:1;23308:9;23304:17;23297:47;23361:131;23487:4;23361:131;:::i;:::-;23353:139;;23251:248;;;:::o;23505:419::-;;23709:2;23698:9;23694:18;23686:26;;23758:9;23752:4;23748:20;23744:1;23733:9;23729:17;23722:47;23786:131;23912:4;23786:131;:::i;:::-;23778:139;;23676:248;;;:::o;23930:419::-;;24134:2;24123:9;24119:18;24111:26;;24183:9;24177:4;24173:20;24169:1;24158:9;24154:17;24147:47;24211:131;24337:4;24211:131;:::i;:::-;24203:139;;24101:248;;;:::o;24355:419::-;;24559:2;24548:9;24544:18;24536:26;;24608:9;24602:4;24598:20;24594:1;24583:9;24579:17;24572:47;24636:131;24762:4;24636:131;:::i;:::-;24628:139;;24526:248;;;:::o;24780:419::-;;24984:2;24973:9;24969:18;24961:26;;25033:9;25027:4;25023:20;25019:1;25008:9;25004:17;24997:47;25061:131;25187:4;25061:131;:::i;:::-;25053:139;;24951:248;;;:::o;25205:419::-;;25409:2;25398:9;25394:18;25386:26;;25458:9;25452:4;25448:20;25444:1;25433:9;25429:17;25422:47;25486:131;25612:4;25486:131;:::i;:::-;25478:139;;25376:248;;;:::o;25630:419::-;;25834:2;25823:9;25819:18;25811:26;;25883:9;25877:4;25873:20;25869:1;25858:9;25854:17;25847:47;25911:131;26037:4;25911:131;:::i;:::-;25903:139;;25801:248;;;:::o;26055:419::-;;26259:2;26248:9;26244:18;26236:26;;26308:9;26302:4;26298:20;26294:1;26283:9;26279:17;26272:47;26336:131;26462:4;26336:131;:::i;:::-;26328:139;;26226:248;;;:::o;26480:419::-;;26684:2;26673:9;26669:18;26661:26;;26733:9;26727:4;26723:20;26719:1;26708:9;26704:17;26697:47;26761:131;26887:4;26761:131;:::i;:::-;26753:139;;26651:248;;;:::o;26905:419::-;;27109:2;27098:9;27094:18;27086:26;;27158:9;27152:4;27148:20;27144:1;27133:9;27129:17;27122:47;27186:131;27312:4;27186:131;:::i;:::-;27178:139;;27076:248;;;:::o;27330:419::-;;27534:2;27523:9;27519:18;27511:26;;27583:9;27577:4;27573:20;27569:1;27558:9;27554:17;27547:47;27611:131;27737:4;27611:131;:::i;:::-;27603:139;;27501:248;;;:::o;27755:419::-;;27959:2;27948:9;27944:18;27936:26;;28008:9;28002:4;27998:20;27994:1;27983:9;27979:17;27972:47;28036:131;28162:4;28036:131;:::i;:::-;28028:139;;27926:248;;;:::o;28180:419::-;;28384:2;28373:9;28369:18;28361:26;;28433:9;28427:4;28423:20;28419:1;28408:9;28404:17;28397:47;28461:131;28587:4;28461:131;:::i;:::-;28453:139;;28351:248;;;:::o;28605:419::-;;28809:2;28798:9;28794:18;28786:26;;28858:9;28852:4;28848:20;28844:1;28833:9;28829:17;28822:47;28886:131;29012:4;28886:131;:::i;:::-;28878:139;;28776:248;;;:::o;29030:419::-;;29234:2;29223:9;29219:18;29211:26;;29283:9;29277:4;29273:20;29269:1;29258:9;29254:17;29247:47;29311:131;29437:4;29311:131;:::i;:::-;29303:139;;29201:248;;;:::o;29455:419::-;;29659:2;29648:9;29644:18;29636:26;;29708:9;29702:4;29698:20;29694:1;29683:9;29679:17;29672:47;29736:131;29862:4;29736:131;:::i;:::-;29728:139;;29626:248;;;:::o;29880:419::-;;30084:2;30073:9;30069:18;30061:26;;30133:9;30127:4;30123:20;30119:1;30108:9;30104:17;30097:47;30161:131;30287:4;30161:131;:::i;:::-;30153:139;;30051:248;;;:::o;30305:419::-;;30509:2;30498:9;30494:18;30486:26;;30558:9;30552:4;30548:20;30544:1;30533:9;30529:17;30522:47;30586:131;30712:4;30586:131;:::i;:::-;30578:139;;30476:248;;;:::o;30730:419::-;;30934:2;30923:9;30919:18;30911:26;;30983:9;30977:4;30973:20;30969:1;30958:9;30954:17;30947:47;31011:131;31137:4;31011:131;:::i;:::-;31003:139;;30901:248;;;:::o;31155:419::-;;31359:2;31348:9;31344:18;31336:26;;31408:9;31402:4;31398:20;31394:1;31383:9;31379:17;31372:47;31436:131;31562:4;31436:131;:::i;:::-;31428:139;;31326:248;;;:::o;31580:419::-;;31784:2;31773:9;31769:18;31761:26;;31833:9;31827:4;31823:20;31819:1;31808:9;31804:17;31797:47;31861:131;31987:4;31861:131;:::i;:::-;31853:139;;31751:248;;;:::o;32005:419::-;;32209:2;32198:9;32194:18;32186:26;;32258:9;32252:4;32248:20;32244:1;32233:9;32229:17;32222:47;32286:131;32412:4;32286:131;:::i;:::-;32278:139;;32176:248;;;:::o;32430:419::-;;32634:2;32623:9;32619:18;32611:26;;32683:9;32677:4;32673:20;32669:1;32658:9;32654:17;32647:47;32711:131;32837:4;32711:131;:::i;:::-;32703:139;;32601:248;;;:::o;32855:419::-;;33059:2;33048:9;33044:18;33036:26;;33108:9;33102:4;33098:20;33094:1;33083:9;33079:17;33072:47;33136:131;33262:4;33136:131;:::i;:::-;33128:139;;33026:248;;;:::o;33705:419::-;;33909:2;33898:9;33894:18;33886:26;;33958:9;33952:4;33948:20;33944:1;33933:9;33929:17;33922:47;33986:131;34112:4;33986:131;:::i;:::-;33978:139;;33876:248;;;:::o;34130:419::-;;34334:2;34323:9;34319:18;34311:26;;34383:9;34377:4;34373:20;34369:1;34358:9;34354:17;34347:47;34411:131;34537:4;34411:131;:::i;:::-;34403:139;;34301:248;;;:::o;34555:222::-;;34686:2;34675:9;34671:18;34663:26;;34699:71;34767:1;34756:9;34752:17;34743:6;34699:71;:::i;:::-;34653:124;;;;:::o;34783:283::-;;34849:2;34843:9;34833:19;;34891:4;34883:6;34879:17;34998:6;34986:10;34983:22;34962:18;34950:10;34947:34;34944:62;34941:2;;;35009:18;;:::i;:::-;34941:2;35049:10;35045:2;35038:22;34823:243;;;;:::o;35072:331::-;;35223:18;35215:6;35212:30;35209:2;;;35245:18;;:::i;:::-;35209:2;35330:4;35326:9;35319:4;35311:6;35307:17;35303:33;35295:41;;35391:4;35385;35381:15;35373:23;;35138:265;;;:::o;35409:332::-;;35561:18;35553:6;35550:30;35547:2;;;35583:18;;:::i;:::-;35547:2;35668:4;35664:9;35657:4;35649:6;35645:17;35641:33;35633:41;;35729:4;35723;35719:15;35711:23;;35476:265;;;:::o;35747:141::-;;35819:3;35811:11;;35842:3;35839:1;35832:14;35876:4;35873:1;35863:18;35855:26;;35801:87;;;:::o;35894:98::-;;35979:5;35973:12;35963:22;;35952:40;;;:::o;35998:99::-;;36084:5;36078:12;36068:22;;36057:40;;;:::o;36103:168::-;;36220:6;36215:3;36208:19;36260:4;36255:3;36251:14;36236:29;;36198:73;;;;:::o;36277:147::-;;36415:3;36400:18;;36390:34;;;;:::o;36430:169::-;;36548:6;36543:3;36536:19;36588:4;36583:3;36579:14;36564:29;;36526:73;;;;:::o;36605:148::-;;36744:3;36729:18;;36719:34;;;;:::o;36759:273::-;;36818:20;36836:1;36818:20;:::i;:::-;36813:25;;36852:20;36870:1;36852:20;:::i;:::-;36847:25;;36974:1;36938:34;36934:42;36931:1;36928:49;36925:2;;;36980:18;;:::i;:::-;36925:2;37024:1;37021;37017:9;37010:16;;36803:229;;;;:::o;37038:305::-;;37097:20;37115:1;37097:20;:::i;:::-;37092:25;;37131:20;37149:1;37131:20;:::i;:::-;37126:25;;37285:1;37217:66;37213:74;37210:1;37207:81;37204:2;;;37291:18;;:::i;:::-;37204:2;37335:1;37332;37328:9;37321:16;;37082:261;;;;:::o;37349:185::-;;37406:20;37424:1;37406:20;:::i;:::-;37401:25;;37440:20;37458:1;37440:20;:::i;:::-;37435:25;;37479:1;37469:2;;37484:18;;:::i;:::-;37469:2;37526:1;37523;37519:9;37514:14;;37391:143;;;;:::o;37540:348::-;;37603:20;37621:1;37603:20;:::i;:::-;37598:25;;37637:20;37655:1;37637:20;:::i;:::-;37632:25;;37825:1;37757:66;37753:74;37750:1;37747:81;37742:1;37735:9;37728:17;37724:105;37721:2;;;37832:18;;:::i;:::-;37721:2;37880:1;37877;37873:9;37862:20;;37588:300;;;;:::o;37894:191::-;;37954:20;37972:1;37954:20;:::i;:::-;37949:25;;37988:20;38006:1;37988:20;:::i;:::-;37983:25;;38027:1;38024;38021:8;38018:2;;;38032:18;;:::i;:::-;38018:2;38077:1;38074;38070:9;38062:17;;37939:146;;;;:::o;38091:96::-;;38157:24;38175:5;38157:24;:::i;:::-;38146:35;;38136:51;;;:::o;38193:90::-;;38270:5;38263:13;38256:21;38245:32;;38235:48;;;:::o;38289:149::-;;38365:66;38358:5;38354:78;38343:89;;38333:105;;;:::o;38444:125::-;;38539:24;38557:5;38539:24;:::i;:::-;38528:35;;38518:51;;;:::o;38575:118::-;;38652:34;38645:5;38641:46;38630:57;;38620:73;;;:::o;38699:126::-;;38776:42;38769:5;38765:54;38754:65;;38744:81;;;:::o;38831:77::-;;38897:5;38886:16;;38876:32;;;:::o;38914:154::-;38998:6;38993:3;38988;38975:30;39060:1;39051:6;39046:3;39042:16;39035:27;38965:103;;;:::o;39074:307::-;39142:1;39152:113;39166:6;39163:1;39160:13;39152:113;;;39251:1;39246:3;39242:11;39236:18;39232:1;39227:3;39223:11;39216:39;39188:2;39185:1;39181:10;39176:15;;39152:113;;;39283:6;39280:1;39277:13;39274:2;;;39363:1;39354:6;39349:3;39345:16;39338:27;39274:2;39123:258;;;;:::o;39387:171::-;;39449:24;39467:5;39449:24;:::i;:::-;39440:33;;39495:4;39488:5;39485:15;39482:2;;;39503:18;;:::i;:::-;39482:2;39550:1;39543:5;39539:13;39532:20;;39430:128;;;:::o;39564:320::-;;39645:1;39639:4;39635:12;39625:22;;39692:1;39686:4;39682:12;39713:18;39703:2;;39769:4;39761:6;39757:17;39747:27;;39703:2;39831;39823:6;39820:14;39800:18;39797:38;39794:2;;;39850:18;;:::i;:::-;39794:2;39615:269;;;;:::o;39890:233::-;;39952:24;39970:5;39952:24;:::i;:::-;39943:33;;39998:66;39991:5;39988:77;39985:2;;;40068:18;;:::i;:::-;39985:2;40115:1;40108:5;40104:13;40097:20;;39933:190;;;:::o;40129:176::-;;40178:20;40196:1;40178:20;:::i;:::-;40173:25;;40212:20;40230:1;40212:20;:::i;:::-;40207:25;;40251:1;40241:2;;40256:18;;:::i;:::-;40241:2;40297:1;40294;40290:9;40285:14;;40163:142;;;;:::o;40311:180::-;40359:77;40356:1;40349:88;40456:4;40453:1;40446:15;40480:4;40477:1;40470:15;40497:180;40545:77;40542:1;40535:88;40642:4;40639:1;40632:15;40666:4;40663:1;40656:15;40683:180;40731:77;40728:1;40721:88;40828:4;40825:1;40818:15;40852:4;40849:1;40842:15;40869:180;40917:77;40914:1;40907:88;41014:4;41011:1;41004:15;41038:4;41035:1;41028:15;41055:102;;41147:2;41143:7;41138:2;41131:5;41127:14;41123:28;41113:38;;41103:54;;;:::o;41163:122::-;41236:24;41254:5;41236:24;:::i;:::-;41229:5;41226:35;41216:2;;41275:1;41272;41265:12;41216:2;41206:79;:::o;41291:116::-;41361:21;41376:5;41361:21;:::i;:::-;41354:5;41351:32;41341:2;;41397:1;41394;41387:12;41341:2;41331:76;:::o;41413:120::-;41485:23;41502:5;41485:23;:::i;:::-;41478:5;41475:34;41465:2;;41523:1;41520;41513:12;41465:2;41455:78;:::o;41539:180::-;41641:53;41688:5;41641:53;:::i;:::-;41634:5;41631:64;41621:2;;41709:1;41706;41699:12;41621:2;41611:108;:::o;41725:122::-;41798:24;41816:5;41798:24;:::i;:::-;41791:5;41788:35;41778:2;;41837:1;41834;41827:12;41778:2;41768:79;:::o

Swarm Source

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